A veces necesitas un objeto donde las claves no están predefinidas:
No puedes usar una interface normal porque no sabes qué claves habrá. Necesitas index signatures o Record.
Una index signature dice "cualquier clave de este tipo tendrá un valor de este otro tipo":
[key: string]: string significa: "las claves son strings y los valores también son strings".
Record es un utility type que hace lo mismo pero de forma más elegante:
Record<string, string> = objeto con claves string y valores string. Más legible que la index signature.
Lo potente de Record es que puedes limitar las claves:
Record<Rol, Permisos> significa: "debe haber una entrada para cada Rol, y el valor es Permisos". Si olvidas un rol, TypeScript avisa:
JavaScript tiene Map, una estructura de datos nativa para pares clave-valor. No confundirlo con Record:
| Record | Map | |
|---|---|---|
| Qué es | Un tipo de TypeScript | Una estructura de datos de JS |
| En runtime | Es un objeto normal {} | Es una instancia de Map |
| Claves | Solo string o number | Cualquier tipo (objetos, etc.) |
| Peso | Cero (solo tipo) | Genera código JS |
Usa Record cuando tipas un objeto plano. Usa Map cuando necesitas la API de Map (set, get, has, delete, iteración ordenada).
Pais con capital, población y continenteRecord<string, Pais> que mapee nombres de países a su informaciónRecord es tu herramienta para diccionarios tipados. Define qué claves y qué valores son válidos, y TypeScript se asegura de que todo encaje.