打字稿错误:Map.values() 给出 IterableIterator not Iterable



当我尝试迭代从Map.values()返回的值(其中 Map 的类型为 <number,Foo>)时,Typescript 给了我这个错误:

错误 TS2495:类型"可迭代迭代器"不是数组类型或字符串类型。

根据 ES6 文档,Map.values()应该返回一个Iterable而不是可迭代迭代器,我应该能够在 for-of 循环中使用它。

这在node中工作正常:

var data = [
{id: 0},
{id: 1},
{id: 3}
];
var m = new Map(data.map(n => [n.id,n]));
for(var i of m.values()) { console.log(i) }

这给出了来自tsc的错误:

interface Foo {
id: number;
}
var data: Foo[] = [
{id: 0},
{id: 1},
{id: 2}
];
var m = new Map<number,Foo>(data.map(n => <[number,Foo]>[n.id,n]));
for(var i of m.values()) { console.log(i) }

我从@types/core-js@0.9.34那里得到地图声明,所以我想问题出在这个声明中??

其他版本和会议信息:

> tsc --version
Version 2.0.3
> cat tsconfig.json 
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true,
"typeRoots": [
"./node_modules/@types/"
]
},
"compileOnSave": true,
"exclude": [
"node_modules/*",
"**/*-aot.ts"
]
}

我不明白tsc正在做的一些隐含的东西tsconfig.json.阅读 tsconfig.json 文档让事情变得更加清晰:

首先,我像这样tsc mytypescript.ts进行转译,这(愚蠢地)导致 Typescript 默默地忽略tsconfig.json文件,这意味着它使用的是默认的 ES5。但这部分有效,因为tsc仍然找到包含 ES6 声明(如 Map、可迭代等)的声明core-js声明。这让我的调试有点麻烦。

其次,在让 Typescript 实际获取我的配置后,无论如何配置都是错误的。我实际上不需要也不想要@types/core-js的声明(非常确定)。是的,我将在我的项目中使用 core-js 作为 polyfill,但是 Typescript 附带了它自己的 ES6 声明typescript/lib/lib.es6.d.ts中的东西,而@types/core-js中的那些是旧的奇怪和蹩脚的东西......

相关内容

最新更新