TypeScript Map: Eine typisierte Key-Value-Collection

TypeScript Map

TypeScript Map: Typisieren, Durchlaufen und Speichern | We.Inc

Typisiere eine Map<K, V> in TypeScript, durchlaufe sie, wandle sie in JSON und zurück und entscheide zwischen Map, Record und einem einfachen Objekt. Probier eine Live-Map im Browser aus.

In TypeScript ist eine Map die ganz normale JavaScript-Map mit Typen für Schlüssel und Werte: new Map<string, number>(). Schlüssel können beliebige Werte sein, Einträge kommen in der Reihenfolge zurück, in der sie zuerst hinzugefügt wurden, size zählt sie, und get gibt V | undefined zurück. JSON.stringify serialisiert keine Map, wandle sie also vorher um.

Map-Methoden und was TypeScript zurückgibt

Der Playground unten ist eine echte Map, die in deinem Browser läuft. Füge Einträge hinzu, aktualisiere und lösche sie und achte auf drei Dinge: die Reihenfolge, die Einträge behalten, was size meldet, und den Unterschied zwischen dem Stringifizieren der Map selbst und dem einer umgewandelten Kopie.

Häufige Fragen

Wie deklariere ich den Typ einer Map in TypeScript?

Übergib Schlüssel- und Werttyp als generische Argumente: const prices = new Map<string, number>(). Für ein Feld oder einen Parameter schreibst du den Typ als Map<string, number>, oder als ReadonlyMap<string, number>, wenn die Funktion nur lesen soll.

Warum enthält der Typ von map.get() undefined?

Weil der Compiler nicht wissen kann, welche Schlüssel zu einem bestimmten Zeitpunkt in der Map stehen. get ist als V | undefined typisiert, also grenzt du mit einer if-Prüfung, einem ??-Fallback oder einem has()-Test ein, bevor du den Wert als V behandelst.

Warum ergibt JSON.stringify(map) {}?

Eine Map hält ihre Einträge in einem internen Slot, nicht als Objekteigenschaften, daher sieht JSON ein leeres Objekt. Wandle zuerst um: Object.fromEntries(map) für String-Schlüssel oder [...map] für ein Array aus Paaren, das jeden Schlüsseltyp übersteht.

Sollte ich eine Map oder einen Record verwenden?

Nimm einen Record für eine feste Menge benannter Schlüssel und für Daten, die von und zu JSON wandern. Nimm eine Map, wenn Einträge während der Laufzeit der App kommen und gehen, wenn Schlüssel Zahlen oder Objekte sind oder wenn die Einfügereihenfolge wichtig ist.

Wandert ein Schlüssel beim Aktualisieren ans Ende?

Nein. Einen vorhandenen Schlüssel zu setzen ändert seinen Wert, behält aber seine ursprüngliche Position. Um ihn ans Ende zu verschieben, löschst du den Schlüssel und setzt ihn erneut.

Map, Record und ein einfaches Objekt

Wie Schlüssel abgeglichen werden

Maps in Funktionssignaturen typisieren

Rezepte für typisierte Maps

Wörter mit einer Map zählen

Der ??-Fallback behandelt das erste Auftreten eines Worts. Deshalb ist es hilfreich statt lästig, dass get number | undefined zurückgibt.

Eine Map als JSON speichern und wieder laden

Ein Array aus Paaren behält jeden Eintrag und seine Reihenfolge. Object.fromEntries ist die lesbare Wahl, wenn jeder Schlüssel ein String ist.

Eine schreibgeschützte Map akzeptieren

Innerhalb von total wäre ein Aufruf von prices.set ein Compilerfehler, Aufrufer können ihre Map also ohne defensive Kopie übergeben.

Live-Map-Playground

Schlüssel

Wert (Zahl)

Setzen

Löschen

Leeren

Zurücksetzen

Einträge in Iterationsreihenfolge

Die Map ist leer.

size: {n}

"{v}" hinzugefügt.

"{v}" gelöscht.

"{v}" ist nicht in der Map, daher hat delete false zurückgegeben.

Gib zuerst einen Schlüssel ein.

Der Wert muss eine Zahl sein.

Kostenlos starten · Keine Kreditkarte nötig

Verwandt: Ratgeber

Produkt

Für wen

Funktionen

Ressourcen

Unternehmen

Sitemap