Neben der Verwendung einer Karte- wie Objekt, hat es eine tatsächliche Map
Objekt die in TypeScript verfügbar ist, wenn es nach ES6 kompiliert wird oder wenn ein Polyfill mit der ES6 Typendefinitionen :
let people = new Map<string, Person>();
Es unterstützt die gleiche Funktionalität wie Object
und mehr, mit einer etwas anderen Syntax:
// Adding an item (a key-value pair):
people.set("John", { firstName: "John", lastName: "Doe" });
// Checking for the presence of a key:
people.has("John"); // true
// Retrieving a value by a key:
people.get("John").lastName; // "Doe"
// Deleting an item by a key:
people.delete("John");
Dies allein hat mehrere Vorteile gegenüber der Verwendung einer Karte. wie Objekt, wie zum Beispiel:
- Unterstützung für nicht auf Zeichenfolgen basierende Schlüssel, z. B. Zahlen oder Objekte, die beide nicht von
Object
(nein, Object
keine Zahlen unterstützt, werden sie in Strings umgewandelt)
- Geringerer Spielraum für Fehler bei Nichtverwendung
--noImplicitAny
, als Map
hat immer eine Schlüssel Typ und eine Wert Typ, während ein Objekt könnte keine Indexsignatur haben
- Die Funktionalität des Hinzufügens/Entfernens von Elementen (Schlüssel-Wert-Paare) ist für diese Aufgabe optimiert, anders als bei der Erstellung von Eigenschaften auf einer
Object
Zusätzlich wird eine Map
Objekt bietet eine leistungsfähigere und elegantere API für gängige Aufgaben, von denen die meisten nicht durch einfache Object
s, ohne Hilfsfunktionen zusammenhacken zu müssen (obwohl einige dieser Funktionen ein vollständiges ES6-Iterator/Iterable-Polyfill für ES5-Ziele oder darunter erfordern):
// Iterate over Map entries:
people.forEach((person, key) => ...);
// Clear the Map:
people.clear();
// Get Map size:
people.size;
// Extract keys into array (in insertion order):
let keys = Array.from(people.keys());
// Extract values into array (in insertion order):
let values = Array.from(people.values());