En indexsignatur beskriver typen av egenskaper när du inte känner till deras namn i förväg — modellera ordböcker/kartor där nycklar är dynamiska.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
En indexsignatur beskriver typen av egenskaper när du inte känner till deras namn i förväg — modellera ordböcker/kartor där nycklar är dynamiska.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Med en enkel indexsignatur antar kompilatorn att varje nyckel finns, så scores.typo är typad som number även om det faktiskt är undefined vid körning. Om du aktiverar noUncheckedIndexedAccess åtgärdas detta:
// 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
}
Alla namngivna egenskaper måste kunna tilldelas indexsignaturens värdetyp.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record är den idiomatiska förkortningen och stöder en begränsad nyckelunion, vilket en vanlig [key: string] inte kan.
Indexsignaturer modellerar genuint dynamiska nyckelerade objekt (uppslagstabeller, cacheminnen, analyserade JSON-kartor).
Känna till säkerhetskaveat (noUncheckedIndexedAccess) och föredra Record<K, V> för läsbarhet — och föredra en Map när nycklar är verkligt öppna och du vill ha riktiga iterations-/storlekssemantik.