У доповненні до використання Map- як об'єкт, там був фактичний Mapоб'єкт в протягом деякого часу, яке є в друкованому при компіляції в ES6, або при використанні polyfill з ES6 типовими визначеннями :
let people = new Map<string, Person>();
Він підтримує той же функціонал Object, що і більше, з дещо іншим синтаксисом:
// 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");
Це саме по собі має ряд переваг по порівнянні з використанням Map- як об'єкта, такі як:
- Підтримка ключів на основі рядків, наприклад, чисел чи об'єктів, жоден з яких не підтримується
Object(ні, Objectне підтримує числа, він перетворює їх у рядки)
- Менше місця для помилок, коли не використовується
--noImplicitAny, оскільки Mapзавжди є тип ключа та тип значення , тоді як об'єкт може не мати підпису індексу
- Функціональність додавання / вилучення елементів (пари ключових значень) оптимізована для завдання, на відміну від створення властивостей на
Object
Крім того, Mapоб’єкт надає більш потужний та елегантний API для загальних завдань, більшість з яких доступні не за допомогою простих Objects без злому допоміжних функцій (хоча для деяких з них потрібен повний ітератор / ітерабельний поліфайл ES6 для цілей ES5 або нижче):
// 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());