ES6地图在打字稿

我创build了一个types脚本的类,它有一个ES6(ECMAscript 2016)Map属性,如下所示:

class Item { configs: ????; constructor () { this.configs = new Map(); } } 

如何在打字稿中声明ES6地图types?

编辑(2016年4月25日):下面的答案是旧的,不应该被认为是最好的答案。 TypeScript现在不支持“原生”地图,所以当输出为ES6时,它只允许使用ES6地图。 对于ES5,它不提供polyfills; 你需要自己embedded它们。

有关更多信息,请参阅下面的mohamed hegazy的答案以获取更为现代的答案,或者甚至是此简短版本的reddit注释 。


从1.5.0 beta开始,TypeScript还不支持Maps 。 它也不是路线图的一部分。

当前最好的解决scheme是一个键入键值的对象(有时称为散列表)。 对于键入string键和对象types为number值的对象:

 var arr : { [key:string]:number; } = {}; 

有些注意事项,但是:

  1. 键只能是stringnumbertypes
  2. 因为数字/string仍然可以互换使用(只有值被强制执行),所以它实际上并不重要。

以上例子:

 // 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 

参见: https : //github.com/Microsoft/TypeScript/issues/3069#issuecomment-99964139

TypeScript不带内置的pollyfills。 如果有的话,由您来决定使用哪种pollyfill。 你可以使用像es6Collection , es6-shims , corejs等等 。 所有的Typescript编译器需要的是你想要使用的ES6结构的声明。 你可以在这个lib文件中find它们。

这里是相关部分:

 interface Map<K, V> { clear(): void; delete(key: K): boolean; entries(): IterableIterator<[K, V]>; forEach(callbackfn: (value: V, index: K, map: Map<K, V>) => void, thisArg?: any): void; get(key: K): V; has(key: K): boolean; keys(): IterableIterator<K>; set(key: K, value?: V): Map<K, V>; size: number; values(): IterableIterator<V>; [Symbol.iterator]():IterableIterator<[K,V]>; [Symbol.toStringTag]: string; } interface MapConstructor { new <K, V>(): Map<K, V>; new <K, V>(iterable: Iterable<[K, V]>): Map<K, V>; prototype: Map<any, any>; } declare var Map: MapConstructor; 

如何在打字稿中声明ES6地图types?

你需要定位 – --module es6 。 这是不幸的,你可以提出你的关注: https : //github.com/Microsoft/TypeScript/issues/2953#issuecomment-98514111

Typescript还不支持Map

ES6兼容性表

作为最低限度:

tsconfig:

  "lib": [ "es2015" ] 

并安装一个如https://github.com/zloirock/core-js的polyfill,如果你想IE <11支持: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /地图

这里是一个例子:

 this.configs = new Map<string, string>(); this.configs.set("key", "value"); 

演示