Además de usar un objeto similar a un mapa , ha habido un Map
objeto real desde hace algún tiempo, que está disponible en TypeScript cuando se compila en ES6, o cuando se usa un polyfill con las definiciones de tipo ES6 :
let people = new Map<string, Person>();
Admite la misma funcionalidad que Object
, y más, con una sintaxis ligeramente diferente:
// 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");
Esto solo tiene varias ventajas sobre el uso de un objeto similar a un mapa , como:
- Soporte para claves no basadas en cadenas, por ejemplo, números u objetos, ninguno de los cuales es compatible con
Object
(no, Object
no admite números, los convierte en cadenas)
- Menos espacio para errores cuando no se usa
--noImplicitAny
, ya que Map
siempre tiene un tipo de clave y un tipo de valor , mientras que un objeto puede no tener una firma de índice
- La funcionalidad de agregar / eliminar elementos (pares clave-valor) está optimizada para la tarea, a diferencia de crear propiedades en un
Object
Además, un Map
objeto proporciona una API más potente y elegante para tareas comunes, la mayoría de las cuales no están disponibles a través de Object
correos electrónicos simples sin hackear las funciones de ayuda (aunque algunas de estas requieren un iterador ES6 completo / polyfill iterable para objetivos ES5 o inferiores):
// 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());