TypeScript consente di descrivere oggetti con nomi di proprietà dinamici, quando non è possibile determinare in anticipo tutte le chiavi. A tal fine, si utilizzano le index signatures, emerse come modo per tipizzare oggetti variabili (mappe, dati da un server esterno, ecc.).
Senza index signature, l'oggetto viene percepito solo in base a chiavi predefinite, qualsiasi altra chiave genererà un errore di compilazione. Inoltre, una dichiarazione non corretta della firma può sfumare i tipi di tutte le proprietà dell'oggetto, ridurre la severità dei tipi e portare a bug.
Dichiarate esplicitamente l'index signature solo dove è giustificato. Per tipizzare un array di oggetti in base a una chiave di stringa, utilizzate la seguente forma:
Esempio di codice:
interface Dictionary { [key: string]: number; length?: number; } const sample: Dictionary = { apples: 4, oranges: 10 }; sample['bananas'] = 6;
Caratteristiche chiave:
È possibile specificare diversi tipi di valori per diverse chiavi nell'index signature?
No, il tipo si applica all'intero insieme di chiavi, se si specifica [key: string]: number, anche sample.length deve essere number: questo frequentemente causa errori quando si combinano index signature e proprietà note.
È possibile utilizzare index signature con simboli (symbol)?
Sì, a partire da ES6 TypeScript supporta index signature per simboli:
interface SymbolMap { [key: symbol]: string; }
Cosa succederà se si dichiara un oggetto con index signature e proprietà aggiuntive di un altro tipo?
Il compilatore restituirà un errore se il tipo della proprietà non è compatibile con il tipo di valore dichiarato nell'index signature. Questo può essere aggirato utilizzando un tipo union o portando tali campi in un'interfaccia separata.
Per qualsiasi risposta dal server veniva utilizzata l'interfaccia {[key: string]: any}, il che portava a bug penetranti a causa della perdita di controllo sulla struttura dei dati.
Vantaggi:
Svantaggi:
Utilizzo di index signature rigorosamente per dizionari (ad esempio, configurazione per chiave), e proprietà note solo con dichiarazione del loro tipo al di fuori della firma.
Vantaggi:
Svantaggi: