O semnătură de index descrie tipul proprietăților atunci când nu cunoașteți numele acestora în avans — modelând dicționare/hărți în care cheile sunt dinamice.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
O semnătură de index descrie tipul proprietăților atunci când nu cunoașteți numele acestora în avans — modelând dicționare/hărți în care cheile sunt dinamice.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Cu o semnătură de index simplă, compilatorul presupune că fiecare cheie există, deci scores.typo este tipizat ca number chiar dacă este de fapt undefined la runtime. Activarea noUncheckedIndexedAccess remediază acest lucru:
// 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
}
Todas as propriedades nomeadas trebuie să fie atribuibile tipului de valoare al semnăturii de index.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record este prescurtarea idiomatică și acceptă o uniune de chei restricționată, ceea ce un simplu [key: string] nu poate face.
Semnăturile de index modelează obiecte cu chei cu adevărat dinamice (tabele de căutare, cache-uri, hărți JSON analizate).
Cunoaștere avertismentul de siguranță (noUncheckedIndexedAccess) și preferă Record<K, V> pentru lizibilitate — și preferă un Map atunci când cheile sunt cu adevărat deschise și doriți semantica reală de iterație/dimensiune.