当前位置: 首页 > 知识库问答 >
问题:

打字稿中的 ES6 映射

申浩广
2023-03-14

我正在typescript中创建一个类,该类的属性是ES6(ECMAscript 2016)映射,如下所示:

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

如何在打字稿中声明ES6 Map类型?

共有3个答案

阴飞星
2023-03-14

下面是一个例子:

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

演示

郎灿
2023-03-14

查看评论: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;
岳炎彬
2023-03-14

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,以便我可以执行一些操作。感谢你的宝贵建议。