Indeksni podpis opisuje tip lastnosti, ko vnaprej ne poznate njihovih imen — modelira slovarje/preslikave, kjer so ključi dinamični.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Indeksni podpis opisuje tip lastnosti, ko vnaprej ne poznate njihovih imen — modelira slovarje/preslikave, kjer so ključi dinamični.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
S preprostim indeksnim podpisom kompilator predpostavlja, da vsak ključ obstaja, zato je scores.typo tipiziran kot number, čeprav je v resnici undefined med izvajanjem. Omogočanje noUncheckedIndexedAccess to odpravi:
// 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
}
Vse poimenovane lastnosti morajo biti dodelljive tipu vrednosti indeksnega podpisa.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record je idiomatična okrajšava in podpira omejeno unijo ključev, kar ne more navaden [key: string].
Indeksni podpisi modelirajo resnično dinamično ponesene objekte (iskalne tabele, predpomnilnike, razčlenjene JSON preslikave).
Poznajtе opozorilo o varnosti (noUncheckedIndexedAccess) in dajte prednost Record<K, V> za berljivost — in dajte prednost Map, kadar so ključi res odprti in želite resnično semantiko iteracije/velikosti.