Czym są sygnatury indeksów w TypeScript i jak umożliwiają elastyczne typy obiektów?
Sygnatury indeksów w TypeScript umożliwiają definiowanie typów dla obiektów, które mogą mieć właściwości o dynamicznych kluczach. Jest to szczególnie przydatne, gdy nie znasz z góry wszystkich nazw właściwości, ale znasz typy wartości, które te właściwości będą miały.
Składnia
Sygnatura indeksu jest definiowana za pomocą nawiasów kwadratowych i deklaracji typu klucza, a następnie deklaracji typu wartości. Oto ogólna składnia:
type StringArray = { [index: number]: string; };
W tym przykładzie StringArray
jest typem dla obiektów, które mają klucze numeryczne z wartościami typu string.
Przykład
Zobaczmy praktyczny przykład, gdzie sygnatury indeksów mogą być przydatne:
type Dictionary = { [key: string]: number; }; let scores: Dictionary = { "Alice": 10, "Bob": 15, "Charlie": 20 }; // Dostęp do właściwości type score = scores["Alice"]; // TypeScript wnioskuje, że to jest liczba
W tym przykładzie Dictionary
jest typem, który reprezentuje obiekty z kluczami typu string i wartościami typu number, co pozwala na tworzenie elastycznych struktur danych, gdzie możesz dodawać właściwości dynamicznie bez ich wcześniejszego definiowania.
Korzyści
- Elastyczność: Możesz obsługiwać obiekty z nieznanymi lub dynamicznymi kluczami.
- Bezpieczeństwo Typów: Pomimo elastyczności, nadal masz kontrolę nad typami wartości.
Sygnatury indeksów są potężne przy tworzeniu elastycznych struktur danych, zwłaszcza w pracy z API lub modelami danych, gdzie kształt obiektu nie jest ściśle zdefiniowany.
Ograniczenia
- Typ Klucza: Typ klucza musi być
string
lubnumber
. Nie można używać innych typów jako kluczy indeksu. - Brak Sprawdzania Typów na Kluczach: TypeScript nie może wymusić sprawdzania typów na kluczach, tylko na wartościach.
Sygnatury indeksów są kluczową funkcją, gdy potrzebujesz pracować z dynamicznymi strukturami obiektów, a jednocześnie chcesz zachować bezpieczeństwo typów w TypeScript.