TypeScriptInterfejsy i klasy
Sygnatura indeksu
Opis obiektów o dowolnych kluczach i wartościach jednego typu.
Przykład
#TypeScript
interface Scores {
[student: string]: number
}
const scores: Scores = { ania: 92, kuba: 78 }
scores.ola = 85
const best = Object.entries(scores).sort(([, a], [, b]) => b - a)[0]
console.log(best)Wynik
['ania', 92]
Definicja i zastosowanie
#Sygnatura indeksu [key: string]: number opisuje obiekt, którego nazw pól nie znasz z góry, ale wiesz, jakiego typu są wartości. Tak wyglądają słowniki: punkty uczniów, liczniki wystąpień, tłumaczenia.
Klucz może być typu string, number albo symbol. Pola zadeklarowane obok sygnatury muszą mieć typ zgodny z nią, bo też są dostępne przez dowolny klucz.
Przy włączonej opcji noUncheckedIndexedAccess odczyt przez sygnaturę indeksu zwraca typ | undefined, co zmusza do obsługi brakujących kluczy. Do słowników ze znanymi kluczami wygodniejszy jest Record<K, V>.
Składnia
#Składnia
interface Slownik {
[key: string]: typ
}Dobre praktyki
#- Gdy znasz listę kluczy, użyj
Record<"html" | "css", number>zamiast ogólnej sygnatury. - Włącz
noUncheckedIndexedAccess, żeby kompilator przypominał o kluczach, których może nie być.
Powiązane hasła
#- Record<Keys, Type>Tworzy typ obiektu o podanych kluczach, w którym każda wartość ma ten sam typ.
- Typy obiektówOpis kształtu obiektu: jakie ma pola i jakiego typu.
- Typy mapowaneTworzą nowy typ obiektu, przekształcając każdy klucz innego typu.
- keyofTworzy unię nazw kluczy danego typu obiektu.
- "noUncheckedIndexedAccess"Dodaje undefined do typu odczytu po indeksie, bo elementu o takim indeksie może nie być.
Widzisz błąd albo brakuje przykładu? Napisz do nas.