Sygnatura indeksu opisuje typ właściwości, gdy wcześniej nie znasz ich nazw — modelując słowniki/mapy, w których klucze są dynamiczne.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Sygnatura indeksu opisuje typ właściwości, gdy wcześniej nie znasz ich nazw — modelując słowniki/mapy, w których klucze są dynamiczne.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Z zwykłą sygnaturą indeksu kompilator zakłada, że każdy klucz istnieje, więc scores.typo jest wpisany jako number, nawet jeśli w rzeczywistości jest undefined w czasie wykonania. Włączenie noUncheckedIndexedAccess to naprawia:
// 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
}
Wszystkie nazwane właściwości muszą być przypisywalne do typu wartości sygnatury indeksu.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record to idiomatyczna skrótowa forma i obsługuje ograniczoną unię kluczy, czego zwykły [key: string] nie może.
Sygnatury indeksów modelują obiekty z naprawdę dynamicznym kluczem (tabele wyszukiwania, cache'e, przeanalizowane mapy JSON).
Znaj zastrzeżenie dotyczące bezpieczeństwa (noUncheckedIndexedAccess) i preferuj Record<K, V> dla czytelności — i preferuj Map, gdy klucze są naprawdę otwarte i chcesz prawdziwej semantyki iteracji/rozmiaru.
Biblioteka pytań rekrutacyjnych IT ze szczegółowymi odpowiedziami — od Juniora do Seniora.
Wesprzyj