Ngoài việc sử dụng một đối tượng giống như bản đồ , hiện tại đã có một Map
đối tượng thực tế , hiện có sẵn trong TypeScript khi biên dịch sang ES6 hoặc khi sử dụng một polyfill với định nghĩa kiểu ES6 :
let people = new Map<string, Person>();
Nó hỗ trợ các chức năng tương tự như Object
, và hơn thế nữa, với cú pháp hơi khác:
// 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");
Điều này một mình có một số lợi thế so với việc sử dụng một đối tượng giống như bản đồ , chẳng hạn như:
- Hỗ trợ cho các khóa không dựa trên chuỗi, ví dụ như số hoặc đối tượng, không có khóa nào được hỗ trợ bởi
Object
(không, Object
không hỗ trợ số, nó chuyển đổi chúng thành chuỗi)
- Ít chỗ hơn cho các lỗi khi không sử dụng
--noImplicitAny
, vì Map
luôn có loại khóa và loại giá trị , trong khi một đối tượng có thể không có chữ ký chỉ mục
- Chức năng thêm / xóa các mục (cặp giá trị khóa) được tối ưu hóa cho tác vụ, không giống như tạo các thuộc tính trên một
Object
Ngoài ra, một Map
đối tượng cung cấp API mạnh mẽ và thanh lịch hơn cho các tác vụ thông thường, hầu hết không có sẵn thông qua các đơn giản Object
mà không hack cùng các chức năng của trình trợ giúp (mặc dù một số trong số này yêu cầu polyfill / lặp lặp ES6 đầy đủ cho các mục tiêu ES5 trở xuống):
// 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());