Index signatura opisuje tip svojstava kada njihova imena ne znate unaprijed — modelira rječnike/mape gdje su ključevi dinamički.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Index signatura opisuje tip svojstava kada njihova imena ne znate unaprijed — modelira rječnike/mape gdje su ključevi dinamički.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Sa običnom index signaturom, kompajler pretpostavlja da svaki ključ postoji, pa je scores.typo tipiziran kao number čak i ako je zapravo undefined tijekom izvršavanja. Omogućavanje noUncheckedIndexedAccess to ispravljava:
// 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
}
Sva imenована svojstva moraju biti dodjeljivanja tip vrijednosti index signature.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record je idiotski kratak oblik i podržava ograničenu uniju ključeva, što obična [key: string] ne može.
Index signature modelira zaista dinamički-ključane objekte (tablice za pretragu, cachee, parsirana JSON mape).
Poznajte upozorenje o sigurnosti (noUncheckedIndexedAccess) i preferujte Record<K, V> radi čitljivosti — te preferujte Map kada su ključevi zaista otvoreni i želite stvarnu semantiku iteracije/veličine.