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 5.9.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`, no `Record`.
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.