【发布时间】:2019-04-25 17:56:37
【问题描述】:
当使用扩展运算符... 将Iterator 转换为Array 以ES5 为目标时,它会显示使用-downlevelIteration 编译器选项的错误。一旦开启,spread 操作符似乎可以完美运行。
我想知道为什么需要指定这个?除了添加更多从 tslib 发出的生成代码之外,启用它是否有任何缺点/限制?
另一个例子:动态创建 N 数组(例如 3):
[...Array(3).keys()] // output: [0, 1, 2]
来自tsc 的错误消息:
Type 'IterableIterator' 不是数组类型或字符串类型。使用编译器选项“--downlevelIteration”来允许迭代器的迭代。
【问题讨论】:
-
哦,谢谢,所以正确的解决方案实际上是在
tsconfig.json中将target设置为es6 -
@Klesun 您不能使用 es6 目标,因为如果需要支持 Internet Explorer 等旧版 js 运行时,它将会中断
-
是的,虽然我相信大多数在这里使用谷歌搜索的人并不局限于这么旧的浏览器,但如果您根本没有
tsconfig.json文件,则默认情况下会出现此错误。 -
我刚刚在 stackblitz.com 中使用了一个新的 TS 项目,其中目标是“esnext”,所以我对@Klesun 关于 es6 是解决方案的第一条评论感到困惑,但我找到了另一种解决方法这个具体代码是
Array.from(Array(3).keys())。 -
@Marcus 嗨,现在是 2021 年。我可以简单地将
target设置为es6吗?
标签: typescript