Una firma d'indice descrive il tipo delle proprietà quando non conosci i loro nomi in anticipo — modellando dizionari/mappe dove le chiavi sono dinamiche.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Una firma d'indice descrive il tipo delle proprietà quando non conosci i loro nomi in anticipo — modellando dizionari/mappe dove le chiavi sono dinamiche.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Con una semplice firma d'indice, il compilatore assume che ogni chiave esista, quindi scores.typo è tipizzata come number anche se in realtà è undefined a runtime. Abilitare noUncheckedIndexedAccess risolve questo:
// with noUncheckedIndexedAccess: true
scores.math; // number | undefined → forces you to handle the missing case
interface Config {
name: string; // known property
[key: string]: string | number; // plus arbitrary extra keys
}
Tutte le proprietà nominate devono essere assegnabili al tipo di valore della firma d'indice.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record è la scorciatoia idiomatica e supporta un'unione di chiavi ristretta, cosa che una semplice [key: string] non può fare.
Le firme d'indice modellano oggetti veramente dinamici con chiavi (tabelle di ricerca, cache, mappe JSON parseificate).
Conosci la caveat sulla sicurezza (noUncheckedIndexedAccess) e preferisci Record<K, V> per la leggibilità — e preferisci una Map quando le chiavi sono veramente aperte e vuoi vere semantiche di iterazione/dimensione.
Una raccolta di domande di colloquio IT con risposte dettagliate — da Junior a Senior.
Dona