EDIT (5 de junho de 2019): Embora a ideia de que "o TypeScript suporta Map
nativamente" ainda seja verdadeira, desde a versão 2.1 o TypeScript suporta algo chamado Record
.
type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
"a": { name: "joe" },
"b": { name: "bart" },
};
Infelizmente, o primeiro parâmetro genérico (tipo de chave) ainda não é totalmente respeitado: mesmo com um string
tipo, algo como peopleA[0]
(a number
) ainda é válido.
EDIT (25 de abril de 2016): A resposta abaixo é antiga e não deve ser considerada a melhor resposta. O TypeScript oferece suporte ao Maps "nativamente" agora, portanto, simplesmente permite que o ES6 Maps seja usado quando a saída for ES6. Para o ES5, ele não fornece polyfills; você precisa incorporá-los você mesmo.
Para obter mais informações, consulte a resposta de mohamed hegazy abaixo para obter uma resposta mais moderna, ou mesmo este comentário no reddit para uma versão curta.
A partir da versão 1.5.0 beta, o TypeScript ainda não suporta Mapas . Ainda não faz parte do roteiro .
A melhor solução atual é um objeto com chave e valor digitados (às vezes chamado de hashmap). Para um objeto com chaves do tipo string
e valores do tipo number
:
var arr : { [key:string]:number; } = {};
Algumas advertências, no entanto:
- As chaves podem ser apenas do tipo
string
ounumber
- Na verdade, não importa o que você usa como o tipo de chave, pois os números / seqüências de caracteres ainda são aceitos de forma intercambiável (apenas o valor é imposto).
Com o exemplo acima:
// OK:
arr["name"] = 1; // String key is fine
arr[0] = 0; // Number key is fine too
// Not OK:
arr[{ a: "a" }] = 2; // Invalid key
arr[3] = "name"; // Invalid value