Formas de objeto
Record
Construye un tipo de objeto a partir de un conjunto de claves y un tipo de valor.
Qué es
El constructor frente al selector que es Pick. Dada una unión de claves y un tipo de valor produce el objeto con esas claves, y dado string produce en cambio una firma de índice. Esos dos comportamientos se parecen y no son lo mismo: uno es una forma fija y el otro un diccionario.
Ejemplos
Record<'a' | 'b', number>→{ a: number; b: number; }Record<string, number>→{ [x: string]: number; }Una firma de índice, no una forma fija — toda clave está permitida y ninguna garantizada.
Record<'id', string>→{ id: string; }
Cada tipo resuelto de arriba lo imprimió TypeScript 6.0.3, no se escribió a mano.
Lo que no hace
- No promete que las claves existan en tiempo de ejecución.
Record<string, number>te dejará leer una clave que nunca se asignó y te daránumber. - No varía el valor por clave. Cuando cada clave necesita su propio tipo de valor, quieres un tipo mapeado con
as, noRecord.
Conclusión
Una unión literal de claves te da una forma que el compilador comprobará. string te da un diccionario que no puede. Elige a conciencia.

