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
values()
, eu fariafor (var key in arr) ... arr[key]
oufor...of
. Outra solução (que é cada vez mais realista hoje em dia e será um bom tempo para muitas coisas) é usar o corejs .map Map<string,string>=new Map<string,string>()
eu o façamap.set(something)
, recebo uma exceçãomap is undefined
, existe outra maneira de inicializá-la?Veja o comentário em: https://github.com/Microsoft/TypeScript/issues/3069#issuecomment-99964139
fonte
Aqui está um exemplo:
Demo
fonte
TS2304
, verifique isso: stackoverflow.com/questions/39416691/…Sim O mapa está agora disponível em texto datilografado. Se você procurar em lib.es6.d.ts, verá a interface:
É ótimo usar como dicionário de cadeia de caracteres, pares de objetos .. o único incômodo é que, se você estiver usando para atribuir valores em outro lugar com Map.get (key), o IDE como Código lhe dará problemas em ser possível indefinido .. em vez de criando uma variável com uma verificação definida. basta converter o tipo (supondo que você tenha certeza de que o mapa possui o par de valores-chave)
fonte
Você precisa atingir
--module es6
. Isso é lamentável e você pode expressar sua preocupação aqui: https://github.com/Microsoft/TypeScript/issues/2953#issuecomment-98514111fonte
No mínimo:
tsconfig:
e instale um polyfill, como https://github.com/zloirock/core-js, se você desejar suporte ao IE <11: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /Mapa
fonte
Não tenho certeza se isso é oficial, mas isso funcionou para mim no texto datilografado 2.7.1:
Em simples
Map<keyType, valueType>
fonte
Com a opção lib config, você pode escolher o mapa no seu projeto. Basta adicionar
es2015.collection
à sua seção lib. Quando você não possui uma configuração lib, adicione uma com os padrões e adicionees2015.collection
.Portanto, quando você tiver o target: es5, altere tsconfig.json para:
fonte
O texto datilografado ainda não suporta
Map
.Tabela de compatibilidade do ES6
fonte
Adicione
"target": "ESNEXT"
propriedade aotsconfig.json
arquivo.fonte