javascript - TypeScript 编译器无法在 for of 循环中找到 immutable.js Map 迭代器

标签 javascript typescript ecmascript-6 immutable.js typescript-typings

我正在尝试将 immutable.js 与 TypeScript 结合使用,但很难让编译器相信 Map 具有迭代器。该代码在 ES6 中工作,所以我不确定为什么它在 TypeScript 中不起作用。

代码

import {Map} from "immutable";

const m = Map({ a: 1 });

for (const [key, value] of m) {
    console.log(key, value);
}

预期输出:

1

实际:

TSError: ⨯ Unable to compile TypeScript
src/test.ts (6,28): Type must have a '[Symbol.iterator]()' method that returns an iterator. (2488)

ES6 示例:

const Immutable = require( "immutable");

const m = Immutable.Map({ a: 1 });

for (const [key, value] of m) {
    console.log(key, value);
}

输出:

1

额外说明:

我也尝试过 m.entries()m.entrySeq() 都产生相同的错误。

我正在使用 TypeScript 2.0.3

最佳答案

好像immutable.js的定义文件里没有这个,不过你可以自己添加:

import {Map} from "immutable";

declare module "immutable" {
    interface Map<K, V> {
        [Symbol.iterator](): IterableIterator<[K,V]>;
    }
}

const m = Map({ a: 1 });

for (const [key, value] of m) { // should be fine
    console.log(key, value);
}

关于javascript - TypeScript 编译器无法在 for of 循环中找到 immutable.js Map 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40311517/

相关文章:

javascript -\r 和\n 之间的区别

javascript - 使用 Angular 发布表单数据的干净方法?

javascript - 我试图确定一个字符串是否是回文

typescript - 如何抑制 "error TS2533: Object is possibly ' null' 或 'undefined' "?

reactjs - Redux - 如何在 reducer 中向数组添加条目

javascript - 如何在窗口内包含 math.random div 放置?

angular - Angular 4 中的 ngx-slick 轮播不移动项目

javascript - 即使在将数字显式转换为字符串变量后,Angular 仍然编译没有错误

javascript - 为什么静态方法不能在实例方法或构造函数内部使用

javascript - 为什么使用默认导入而不是命名导入时我的 ES6 webpack 包更大?