nic*_*all 134 javascript typescript typescript1.5
我正在使用类似脚本创建一个类,该类具有ES6(ECMAscript 2016)Map的属性,如下所示:
class Item {
configs: ????;
constructor () {
this.configs = new Map();
}
}
Run Code Online (Sandbox Code Playgroud)
如何在打字稿中声明ES6 Map类型?
zeh*_*zeh 189
编辑(2016年4月25日):下面的答案是旧的,不应被视为最佳答案.TypeScript现在支持"原生"地图,因此它只允许在输出为ES6时使用ES6地图.对于ES5,它不提供polyfill; 你需要自己嵌入它们.
有关更多信息,请参阅下面的mohamed hegazy的答案,以获得更现代的答案,甚至是简短版本的reddit评论.
从1.5.0测试版开始,TypeScript尚不支持Maps.它还不是路线图的一部分.
当前最佳解决方案是具有键入键和值的对象(有时称为散列映射).对于具有类型键和类型Map
值的对象Record
:
type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
"a": { name: "joe" },
"b": { name: "bart" },
};
Run Code Online (Sandbox Code Playgroud)
然而,一些警告:
string
或peopleA[0]
通过上面的例子:
var arr : { [key:string]:number; } = {};
Run Code Online (Sandbox Code Playgroud)
moh*_*azy 122
请参阅以下评论:https://github.com/Microsoft/TypeScript/issues/3069#issuecomment-99964139
TypeScript没有内置的pollyfill.由您来决定使用哪种pollyfill,如果有的话.你可以使用像es6Collection, es6-shims, corejs ..etc这样的东西 .所有Typescript编译器需要的是您要使用的ES6结构的声明.你可以在这个lib文件中找到它们.
这是相关部分:
Run Code Online (Sandbox Code Playgroud)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;
Arn*_*aud 49
这是一个例子:
this.configs = new Map<string, string>();
this.configs.set("key", "value");
Run Code Online (Sandbox Code Playgroud)
小智 23
是地图现在可用于打字稿..如果查看lib.es6.d.ts,您将看到界面:
interface Map<K, V> {
clear(): void;
delete(key: K): boolean;
forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void,thisArg?: any): void;
get(key: K): V | undefined;
has(key: K): boolean;
set(key: K, value: V): this;
readonly size: number;}
Run Code Online (Sandbox Code Playgroud)
它非常适合用作字符串,对象的字典..唯一令人烦恼的是,如果你使用它在Map.get(key)的其他地方赋值,那么像Code这样的IDE会给你带来关于可能未定义的问题..而不是使用is-defined check创建变量..简单地转换类型(假设您确定地图具有键值对)
class myclass {
mymap:Map<string,object>
...
mymap = new Map<string,object>()
mymap.set("akey",AnObject)
let objectref = <AnObject>mymap.get("akey")
Run Code Online (Sandbox Code Playgroud)
bas*_*rat 12
如何在打字稿中声明ES6 Map类型?
你需要瞄准目标--module es6
.这是不幸的,你可以在这里提出你的担忧:https://github.com/Microsoft/TypeScript/issues/2953#issuecomment-98514111
至少是:
tsconfig:
"lib": [
"es2015"
]
Run Code Online (Sandbox Code Playgroud)
并安装一个填充工具如https://github.com/zloirock/core-js如果你想IE <11支持:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /地图
不确定这是否是官方的,但这在打字稿 2.7.1 中对我有用:
class Item {
configs: Map<string, string>;
constructor () {
this.configs = new Map();
}
}
Run Code Online (Sandbox Code Playgroud)
简单来说 Map<keyType, valueType>