我正在typescript中创建一个类,该类的属性是ES6(ECMAscript 2016)映射,如下所示:
class Item {
configs: ????;
constructor () {
this.configs = new Map();
}
}
如何在打字稿中声明ES6 Map类型?
查看评论:https://github.com/Microsoft/TypeScript/issues/3069#issuecomment-99964139
TypeScript没有内置的pollyfills。由您决定使用哪个pollyfill(如果有)。你可以用es6Collection,es6-shims,corejs之类的..等等。Typescript编译器需要的只是您想要使用的ES6构造的声明。您可以在这个lib文件中找到它们。
以下是相关部分:
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;
EDIT(2019年6月5日):尽管“TypeScript支持本地映射
”的想法仍然正确,因为2.1版TypeScript可以支持名为Record
type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
"a": { name: "joe" },
"b": { name: "bart" },
};
不幸的是,第一个泛型参数(键类型)仍然没有得到完全尊重:即使使用
string
类型,像peopleA[0]
(a号
)这样的东西仍然有效。
编辑(2016 . 04 . 25):下面的答案是旧的,不应该被认为是最佳答案。TypeScript现在“本机”支持地图,所以当输出是ES6时,它只允许使用ES6地图。对于ES5,它不提供polyfills你需要自己嵌入它们。
有关更多信息,请参阅下面的mohamed hegazy的答案,以获得更现代的答案,或者甚至可以参考此reddit评论的简短版本。
从1.5.0测试版开始,TypeScript还不支持地图。这也不是路线图的一部分。
当前的最佳解决方案是具有类型化键和值的对象(有时称为哈希映射)。对于键类型为
字符串
且值为数字
的对象:
var arr : { [key:string]:number; } = {};
然而,一些警告:
< li >密钥只能是< code >字符串
或< code >数字类型 < li >实际上,使用什么作为键类型并不重要,因为数字/字符串仍然可以互换(只有值是强制的)。
对于以上示例:
// 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
问题内容: 我希望能够实例化一个Typescript类,在运行时可以获取该类和构造函数的详细信息。我想编写的函数将包含类名和构造函数参数。 问题答案: 您可以尝试: 编辑 此版本可在TypeScript操场上使用,例如:
我正在努力寻找 有什么不同?
与Babel/Sublime(或Atom、VS Code等)相比,Visual Studio 2015对带有React的ES6/ES7语法的支持有一些明确的限制。具体地说,我试图在不关闭Visual Studio 2015(.NET 4.5 project NOT version 5)中的JS调试/智能感知的情况下,在JSX文件中实现对ES6导入/导出和ES7装饰器和类属性的“支持”。 我发现了一
我有一个抽象类,它有一个抽象的泛型方法,看起来像这样 然后我有一个扩展这个抽象类的类。因为是抽象的,所以我必须在子类中实现它。 看起来像这样 返回 我得到以下错误虽然 类型'某物[]'不能分配给类型'T[]'。 我尝试了一些方法来解决这个错误,但是为了让Typescript满意,似乎还必须使子实现通用化。在我从至。 因此,我想知道如何使我的代码与TypeScript 2.4.1兼容?
我正在学习Typescript,并尝试实现一个简单的React/Redux应用程序。当我使用同步操作时,它工作得很好,但问题在于异步操作。我正在学习官方的redux教程。 首先,我宣布会议状态 然后我为这个动作声明接口 我使用联合类型导出它们
我有一个api,它将返回地图响应。 我想迭代角度,但不幸的是,我在尝试时出错了。 错误:: 此表达式不可调用。输入数字没有呼叫signatures.ts(2349) 在排版图上迭代 但是我可以使用下面的代码在html中迭代... 在html中 在里面ts文件 基本上,我想迭代后端api响应内getQuizResult,以便我可以执行一些操作。感谢你的宝贵建议。