TypeScript permet de décrire des objets avec des noms de propriétés dynamiques, lorsqu'il est impossible de définir à l'avance toutes les clés. Pour cela, on utilise des signatures d'index, qui sont apparues comme un moyen de typage des objets variant (maps, données d'un serveur externe, etc.).
Sans signature d'index, un objet n'est perçu que par des clés prédéfinies, toutes les autres provoqueront une erreur de compilation. De plus, une déclaration incorrecte de signature peut brouiller les types de toutes les propriétés de l'objet, diminuer la rigueur des types et entraîner des bogues.
Déclarez explicitement la signature d'index uniquement là où cela est justifié. Pour le typage d'un tableau d'objets par clé de chaîne, utilisez la forme suivante :
Exemple de code :
interface Dictionary { [key: string]: number; length?: number; } const sample: Dictionary = { apples: 4, oranges: 10 }; sample['bananas'] = 6;
Caractéristiques clés :
Peut-on définir différents types de valeurs pour différentes clés dans une signature d'index ?
Non, le type s'applique à l'ensemble du jeu de clés, si vous indiquez [key: string]: number, alors sample.length doit également être de type number : cela provoque souvent des erreurs lors de l'utilisation conjointe de la signature d'index et des propriétés connues.
Peut-on utiliser une signature d'index avec des symboles (symbol) ?
Oui, à partir de ES6, TypeScript prend en charge la signature d'index par symbole :
interface SymbolMap { [key: symbol]: string; }
Que se passe-t-il si l'on déclare un objet avec une signature d'index et des propriétés supplémentaires d'un autre type ?
Le compilateur renverra une erreur si le type de la propriété n'est pas compatible avec le type déclaré de la valeur de la signature d'index. Cela peut être contourné en utilisant un type union ou en séparant ces champs dans une interface distincte.
Pour toute réponse du serveur, on utilisait l'interface {[key: string]: any}, ce qui entraînait des bogues intrusifs en raison de la perte de contrôle sur la structure des données.
Avantages :
Inconvénients :
Utilisation de la signature d'index strictement pour les dictionnaires (par exemple, configuration par clé), tandis que les propriétés connues sont déclarées hors de la signature.
Avantages :
Inconvénients :