index signature popisuje typ vlastností, když jejich jména nechcete znát předem — modeluje slovníky/mapy, kde jsou klíče dynamické.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
index signature popisuje typ vlastností, když jejich jména nechcete znát předem — modeluje slovníky/mapy, kde jsou klíče dynamické.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Při běžné index signature kompilátor předpokládá, že každý klíč existuje, takže scores.typo je typizován jako number i když je za běhu ve skutečnosti undefined. Povolení noUncheckedIndexedAccess to opravuje:
// 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
}
Všechny pojmenované vlastnosti musí být přiřaditelné typu hodnoty index signature.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record je idiomatická zkratka a podporuje omezené sjednocení klíčů, které holá [key: string] nemůže.
Index signatures modelují skutečně dynamicky klíčované objekty (vyhledávací tabulky, mezipaměti, parsované JSON mapy).
Znáte varování bezpečnosti (noUncheckedIndexedAccess) a preferujte Record<K, V> kvůli čitelnosti — a preferujte Map, když jsou klíče skutečně otevřené a chcete skutečnou sémantiku iterace/velikosti.