我在类型记录中创建一个类,其属性为ES6 (ECMAscript 2016)地图,如下所示:
class Item {
configs: ????;
constructor () {
this.configs = new Map();
}
}如何在类型记录中声明ES6映射类型?
发布于 2015-05-03 21:42:16
编辑(2019年6月5日):虽然"TypeScript本地支持Map“的想法仍然是正确的,因为2.1版本TypeScript支持称为Record的东西。
type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
"a": { name: "joe" },
"b": { name: "bart" },
};不幸的是,第一个泛型参数(键类型)仍未得到充分尊重:即使使用string类型,类似于peopleA[0] ( number)的内容仍然有效。
编辑(2016年4月25日):下面的答案是旧的,不应该被认为是最好的答案。TypeScript现在确实“本机”支持地图,所以它只允许在输出为ES6时使用ES6地图。对于ES5,它不提供多填充;您需要自己嵌入它们。
有关更多信息,请参考mohamed hegazy的答复如下以获得更现代的答案,甚至参考这个编辑评论的简短版本。
在1.5.0beta版中,TypeScript还不支持地图。它也还不是路线图的一部分。
当前最好的解决方案是具有类型化键和值的对象(有时称为hashmap)。用于具有string类型键和number类型值的对象。
var arr : { [key:string]:number; } = {};但是,一些注意事项:
string或number类型的在上面的例子中:
// 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发布于 2015-05-07 21:34:21
见评论:https://github.com/Microsoft/TypeScript/issues/3069#issuecomment-99964139
TypeScript没有内置在pollyfills中。如果有的话,该由你来决定使用哪一种填充。你可以使用像es6Collection,es6-shims,核..etc之类的东西。所有类型记录编译器所需的都是要使用的ES6结构的声明。你可以在这个库文件中找到它们。 以下是相关部分: 接口Map { clear():size;删除(key: K):布尔;条目():IterableIterator;forEach(值: V,索引: K,map: Map) => void,thisArg: any):set;get(key: K):V;has(key: K):布尔值;key(key:K):IterableIterator;set(key: K,value?:V):Map;size: number;value():IterableIterator;Symbol.iterator:IterableIterator;Symbol.toStringTag: string;}接口MapConstructor { new ():Map;new (可迭代: Iterable):Map;prototype: Map;}声明var Map: MapConstructor;
发布于 2017-07-26 03:33:14
https://stackoverflow.com/questions/30019542
复制相似问题