TypeScript permite describir objetos con nombres de propiedades dinámicos, cuando no se pueden determinar de antemano todas las claves. Para ello se utilizan las index signatures, que surgieron como una forma de tipar objetos variant (mapas, datos de un servidor externo, etc.).
Sin una index signature, el objeto se percibe solo con claves predeterminadas, cualquier otra causará un error de compilación. Además, una firma mal declarada puede difuminar los tipos de todas las propiedades del objeto, reducir la rigurosidad de los tipos y provocar errores.
Declare explícitamente la index signature solo donde esté justificado. Para tipar un array de objetos por clave de tipo string, use la siguiente forma:
Ejemplo de código:
interface Dictionary { [key: string]: number; length?: number; } const sample: Dictionary = { apples: 4, oranges: 10 }; sample['bananas'] = 6;
Características clave:
¿Se pueden asignar diferentes tipos de valores para diferentes claves en la index signature?
No, el tipo se aplica a todo el conjunto de claves, si especifica [key: string]: number, entonces sample.length también debe ser number: esto a menudo provoca errores al usar conjuntamente index signatures y propiedades conocidas.
¿Se puede usar index signature con símbolos (symbol)?
Sí, a partir de ES6 TypeScript admite index signature por símbolo:
interface SymbolMap { [key: symbol]: string; }
¿Qué sucederá si se declara un objeto con index signature y propiedades adicionales de otro tipo?
El compilador generará un error si el tipo de la propiedad no es compatible con el tipo declarado de la index signature. Esto se puede evitar utilizando tipos union o extrayendo esos campos a una interfaz separada.
Para cualquier respuesta del servidor se utilizó la interfaz {[key: string]: any}, lo que llevó a errores difusos debido a la pérdida de control sobre la estructura de los datos.
Pros:
Contras:
Uso estricto de index signature para diccionarios (por ejemplo, configuración por clave), y propiedades conocidas solo con la declaración de su tipo fuera de la firma.
Pros:
Contras: