Map w TypeScript: otypowana kolekcja klucz-wartość

Map w TypeScript

Map w TypeScript: typowanie, iteracja i zapisywanie | We.Inc

Otypuj Map<K, V> w TypeScript, iteruj po nim, zamień go na JSON i z powrotem oraz zdecyduj między Map, Record a zwykłym obiektem. Wypróbuj działający Map w przeglądarce.

W TypeScript Map to zwykły Map z JavaScriptu z typami dla kluczy i wartości: new Map<string, number>(). Kluczem może być dowolna wartość, wpisy wracają w kolejności, w jakiej zostały pierwotnie dodane, size je liczy, a get zwraca V | undefined. JSON.stringify nie serializuje Map, więc najpierw go przekonwertuj.

Metody Map i co zwraca TypeScript

Poniższy playground to prawdziwy Map działający w Twojej przeglądarce. Dodawaj, aktualizuj i usuwaj wpisy i obserwuj trzy rzeczy: kolejność, jaką zachowują wpisy, co zwraca size, oraz różnicę między zamianą na tekst samego Map a skonwertowanej kopii.

Najczęściej zadawane pytania

Jak zadeklarować typ Map w TypeScript?

Przekaż typy klucza i wartości jako argumenty generyczne: const prices = new Map<string, number>(). Dla pola lub parametru zapisz typ jako Map<string, number> albo ReadonlyMap<string, number>, gdy funkcja ma go tylko czytać.

Dlaczego map.get() ma w typie undefined?

Ponieważ kompilator nie może wiedzieć, jakie klucze są w Map w danym momencie. get ma typ V | undefined, więc zawężasz go sprawdzeniem if, wartością zastępczą ?? lub testem has(), zanim potraktujesz wartość jako V.

Dlaczego JSON.stringify(map) daje {}?

Map przechowuje wpisy w wewnętrznym slocie, a nie jako właściwości obiektu, więc JSON widzi pusty obiekt. Najpierw przekonwertuj: Object.fromEntries(map) dla kluczy tekstowych albo [...map] dla tablicy par, która działa z każdym typem klucza.

Używać Map czy Record?

Używaj Record dla stałego zestawu nazwanych kluczy i danych, które trafiają do JSON i z niego wracają. Używaj Map, gdy wpisy pojawiają się i znikają podczas działania aplikacji, gdy klucze są liczbami lub obiektami albo gdy liczy się kolejność dodania.

Czy aktualizacja klucza przenosi go na koniec?

Nie. Ustawienie istniejącego klucza zmienia jego wartość, ale zachowuje pierwotną pozycję. Aby przenieść go na koniec, usuń klucz i ustaw go ponownie.

Map, Record i zwykły obiekt

Jak dopasowywane są klucze

Typowanie Map w sygnaturach funkcji

Przepisy na otypowany Map

Licz słowa za pomocą Map

Wartość zastępcza ?? obsługuje pierwsze wystąpienie słowa, dlatego to, że get zwraca number | undefined, pomaga, a nie przeszkadza.

Zapisz Map jako JSON i wczytaj z powrotem

Tablica par zachowuje każdy wpis i jego kolejność. Object.fromEntries to czytelny wybór, gdy każdy klucz jest stringiem.

Przyjmuj Map tylko do odczytu

Wewnątrz total wywołanie prices.set byłoby błędem kompilacji, więc wywołujący mogą przekazać swój Map bez kopii obronnej.

Playground Map na żywo

Klucz

Wartość (liczba)

Ustaw

Usuń

Wyczyść

Resetuj

Wpisy w kolejności iteracji

Map jest pusty.

size: {n}

Dodano "{v}".

Usunięto "{v}".

"{v}" nie ma w Map, więc delete zwrócił false.

Najpierw wpisz klucz.

Wartość musi być liczbą.

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony