TypeScript stelt je in staat om objecten met dynamische eigenschapsnamen te beschrijven, wanneer je niet alle sleutels van tevoren kunt bepalen. Hiervoor worden index signatures gebruikt, die ontstaan zijn als een manier om variabele objecten te typen (map, gegevens van een externe server, enz.).
Zonder index signature wordt een object alleen herkend op de vooraf bepaalde sleutels; elke andere sleutel zal een compilatiefout veroorzaken. Bovendien kan een onjuiste declaratie van de signature de types van alle eigenschappen van het object vervagen, de type-rigideit verlagen en leiden tot bugs.
Declareer index signature expliciet alleen daar waar het gerechtvaardigd is. Voor het typeren van een array van objecten op een string sleutel, gebruik onderstaande vorm:
Codevoorbeeld:
interface Dictionary { [key: string]: number; length?: number; } const sample: Dictionary = { apples: 4, oranges: 10 }; sample['bananas'] = 6;
Belangrijke kenmerken:
Kan ik verschillende waarde types voor verschillende sleutels in index signature opgeven?
Nee, het type geldt voor de gehele set sleutels; als je [key: string]: number opgeeft, moet sample.length ook een number zijn: dit leidt vaak tot fouten bij het samen gebruiken van index signature en bekende eigenschappen.
Kan ik index signature met symbolen (symbol) gebruiken?
Ja, vanaf ES6 ondersteunt TypeScript index signature op symbol:
interface SymbolMap { [key: symbol]: string; }
Wat gebeurt er als ik een object met index signature en extra eigenschappen van een ander type declareer?
De compiler zal een fout geven als het type van de eigenschap niet compatibel is met het opgegeven type van de index signature. Dit kan worden omzeild door gebruik te maken van een union-type of door dergelijke velden in een apart interface te plaatsen.
Voor elk antwoord van de server werd de interface {[key: string]: any} gebruikt, wat leidde tot doordringende bugs door een gebrek aan controle over de datastuctuur.
Voordelen:
Nadelen:
Gebruik index signature strikt voor dictionaries (bijvoorbeeld, configuratie op sleutel), en voor expliciet bekende eigenschappen alleen met declaratie van hun type buiten de signature.
Voordelen:
Nadelen: