マップのようなオブジェクトを使用することに加えて、ES6にコンパイルするとき、またはES6のtype-definitionsでポリフィルを使用するときにTypeScriptで使用できる、しばらくの間実際のMap
オブジェクトがありました。
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());