Comprender en profundidad el tipo Record de TypeScript
- 580Palabras
- 3Minutos
- 30 Jul, 2024
En TypeScript, Record
es un tipo genérico integrado muy útil que nos permite definir los tipos de las claves y valores de un objeto. El uso del tipo Record
es extremadamente valioso cuando se trabaja con estructuras de datos clave-valor, ya que proporciona un soporte de tipo fuerte para las claves y los valores de los objetos. En este artículo, exploraremos en detalle la definición, el uso y los casos prácticos del tipo Record
.
Definición del tipo Record
El tipo Record
es un tipo genérico proporcionado por TypeScript que acepta dos parámetros de tipo:
1Record<Keys, Type>;
Keys
: El tipo de las claves del objeto, que generalmente es una cadena, un número o un tipo de unión.Type
: El tipo de los valores del objeto.
La función del Record
es mapear todas las claves de un objeto a un tipo de valor específico. Por ejemplo, si queremos que todas las claves de un objeto sean de tipo cadena y los valores sean de tipo número, podemos usar Record<string, number>
.
Escenarios de Uso
El tipo Record
es especialmente adecuado para los siguientes escenarios:
- Gestión de estructuras de datos clave-valor: Cuando necesitamos crear un objeto con una estructura de pares clave-valor y tenemos requisitos estrictos sobre los tipos de claves y valores,
Record
es muy útil. - Sustitución de firmas de índice: A diferencia de las firmas de índice,
Record
puede proporcionar un control más preciso sobre los tipos de claves y valores. - Representación de estructuras de diccionario:
Record
se puede utilizar para representar estructuras de diccionario con claves fijas.
Ejemplos de Código
Uso Básico
El siguiente ejemplo muestra cómo usar el tipo Record
para definir un objeto, donde las claves son cadenas y los valores son números:
1type Scores = Record<string, number>;2
3const studentScores: Scores = {4 Alice: 85,5 Bob: 92,6 Charlie: 78,7};8
9console.log(studentScores);10// Salida: { Alice: 85, Bob: 92, Charlie: 78 }
En este ejemplo, el objeto studentScores
tiene claves de tipo cadena y valores de tipo número.
Uso de Tipos de Unión como Claves
También podemos usar tipos de unión para restringir las claves del objeto. Por ejemplo, si queremos que las claves del objeto sean solo cadenas específicas, podemos definirlo así:
1type Role = "admin" | "user" | "guest";2
3type RolePermissions = Record<Role, string[]>;4
5const permissions: RolePermissions = {6 admin: ["create", "edit", "delete"],7 user: ["view", "edit"],8 guest: ["view"],9};10
11console.log(permissions);12// Salida: { admin: ['create', 'edit', 'delete'], user: ['view', 'edit'], guest: ['view'] }
En este ejemplo, el tipo RolePermissions
asegura que las claves del objeto permissions
solo pueden ser 'admin'
, 'user'
o 'guest'
.
Combinación con Propiedades Opcionales
Se puede combinar Record
con el tipo Partial
para hacer que todas las propiedades sean opcionales:
1type PersonInfo = {2 name: string;3 age: number;4};5
6type PartialPersonInfo = Partial<Record<"Alice" | "Bob", PersonInfo>>;7
8const partialInfo: PartialPersonInfo = {9 Alice: { name: "Alice", age: 30 },10 // Información de Bob es opcional11};12
13console.log(partialInfo);14// Salida: { Alice: { name: 'Alice', age: 30 } }
En este ejemplo, Partial<Record<'Alice' | 'Bob', PersonInfo>>
define un tipo de objeto donde las claves pueden ser 'Alice'
o 'Bob'
y los valores son del tipo PersonInfo
, pero todas las propiedades son opcionales.
Conclusión
El tipo Record
de TypeScript es una herramienta poderosa y flexible, adecuada para escenarios que requieren una definición precisa de los tipos de claves y valores de los objetos. No solo simplifica la definición de tipos, sino que también mejora la legibilidad y seguridad del código. Al combinarlo con otras herramientas de tipo, como Partial
, Pick
y Omit
, los desarrolladores pueden manejar estructuras de datos complejas con facilidad, mejorando significativamente la calidad y mantenibilidad del código.