マップのようなオブジェクトを使用することに加えて、実際のMap
オブジェクトがしばらくの間存在していました。これは、ES6にコンパイルするとき、またはES6の型定義でポリフィルを使用するときにTypeScriptで使用できます。
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");
これだけでも、次のようなマップのようなオブジェクトを使用するよりもいくつかの利点があります。
- 文字列に基づかないキーのサポート。たとえば、数字やオブジェクト。どちらもサポートされていません
Object
(いいえ、Object
数字はサポートされていません。文字列に変換されます)
- オブジェクトにはインデックス署名がない可能性があるのに対し、常にキータイプと値
--noImplicitAny
タイプがあるため、を使用しない場合のエラーの余地が少なくなります。Map
- アイテム(キーと値のペア)を追加/削除する機能は、プロパティの作成とは異なり、タスク用に最適化されています。
Object
さらに、Map
オブジェクトは一般的なタスクに対してより強力でエレガントなAPIを提供します。これらのほとんどは、Object
ヘルパー関数をハックしないと単純なものでは利用できません(ただし、これらの一部では、ES5ターゲット以下の完全なES6イテレーター/イテレーターポリフィルが必要です)。
// 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());