Além de usar um objeto parecido com um mapa , há um Map
objeto real há algum tempo, disponível no TypeScript ao compilar no ES6 ou ao usar um polyfill com as definições de tipo do ES6 :
let people = new Map<string, Person>();
Ele suporta a mesma funcionalidade Object
e mais com uma sintaxe ligeiramente 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");
Isso por si só tem várias vantagens sobre o uso de um objeto parecido com um mapa , como:
- Suporte para chaves não baseadas em strings, por exemplo, números ou objetos, nenhum dos quais é suportado por
Object
(não, Object
não suporta números, ele os converte em strings)
- Menos espaço para erros quando não estiver em uso
--noImplicitAny
, pois Map
sempre possui um tipo de chave e um valor , enquanto um objeto pode não ter uma assinatura de índice
- A funcionalidade de adicionar / remover itens (pares de valores-chave) é otimizada para a tarefa, ao contrário da criação de propriedades em um
Object
Além disso, um Map
objeto fornece uma API mais poderosa e elegante para tarefas comuns, a maioria das quais não está disponível através de Object
s simples sem hackear as funções auxiliares (embora algumas delas exijam um iterador ES6 / polyfill iterável para destinos ES5 ou abaixo):
// 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());