นอกเหนือจากการใช้วัตถุคล้ายแผนที่แล้วยังมีMap
วัตถุจริงอยู่พักหนึ่งซึ่งสามารถใช้งานได้ใน TypeScript เมื่อรวบรวมเป็น 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");
เพียงอย่างเดียวนี้มีข้อดีหลายประการมากกว่าการใช้วัตถุที่มีลักษณะคล้ายแผนที่เช่น:
- การสนับสนุนสำหรับคีย์ที่ไม่ใช่สตริงเช่นตัวเลขหรือวัตถุซึ่งไม่ได้รับการสนับสนุนโดย
Object
( Object
ไม่ไม่รองรับตัวเลขมันจะแปลงเป็นสตริง)
- มีที่ว่างน้อยลงสำหรับข้อผิดพลาดเมื่อไม่ได้ใช้
--noImplicitAny
เนื่องจาก a Map
มักจะมีประเภทของคีย์และชนิดของค่าในขณะที่วัตถุอาจไม่มีลายเซ็นของดัชนี
- ฟังก์ชันการทำงานของการเพิ่ม / ลบรายการ (คู่คีย์ - ค่า) ถูกปรับให้เหมาะกับงานซึ่งแตกต่างจากการสร้างคุณสมบัติบน
Object
นอกจากนี้Map
วัตถุยังมี API ที่ทรงพลังและสง่างามสำหรับงานทั่วไปซึ่งส่วนใหญ่ไม่สามารถใช้งานได้โดยง่ายObject
โดยไม่ต้องแฮ็คฟังก์ชั่นตัวช่วย (แม้ว่าบางอย่างต้องใช้ ES6 iterator / iterable polyfill สำหรับเป้าหมาย 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());