Typescript 为什么默认情况下“downlevelIteration”未启用?

Typescript 为什么默认情况下“downlevelIteration”未启用?,typescript,Typescript,当使用扩展运算符..将迭代器转换为数组以ES5为目标时,它会显示使用-downlevelIteration编译器选项的错误。一旦启用,spread操作符似乎就能完美地工作 我想知道为什么需要具体说明这一点?除了从tslib添加更多已生成的代码外,启用它是否还有任何缺点/限制 另一个示例:动态创建N的数组(如3): 它在VS代码中显示错误: 来自tsc的错误消息: 类型“IterableTerator”不是数组类型或字符串类型。使用编译器选项--downlevelIteration允许迭代器的迭

当使用扩展运算符
..
迭代器
转换为
数组
以ES5为目标时,它会显示使用
-downlevelIteration
编译器选项的错误。一旦启用,spread操作符似乎就能完美地工作

我想知道为什么需要具体说明这一点?除了从tslib添加更多已生成的代码外,启用它是否还有任何缺点/限制

另一个示例:动态创建N的数组(如3):

它在VS代码中显示错误:

来自tsc的错误消息:

类型“IterableTerator”不是数组类型或字符串类型。使用编译器选项--downlevelIteration允许迭代器的迭代

在阅读了和文章之后,我相信这个问题的答案是禁用了
downlevelIteration
,因为您需要决定(通过配置)希望TypeScript如何处理兼容性代码的编译(以支持旧版本的Javascript)

正如本文中更详细的解释所表明的那样,您必须决定是否希望TypeScript内联必要的助手函数(简单,但可能导致较大的生产包大小),或者是否希望配置TypeScript作为依赖项使用,然后调用其外部方法


我强烈建议您阅读本书,以便更深入地理解……并且可能是您最初问题的替代解决方案。

生成的代码也非常难看哦,谢谢,因此,正确的解决方案实际上是在
tsconfig.json
@Klesun中将
target
设置为
es6
,您不能使用es6 target,因为如果需要支持传统的js运行时(如InternetExploreryEAH),它将崩溃,尽管我相信大多数人在这里搜索并不局限于这么旧的浏览器,如果您根本没有
tsconfig.json
文件,则默认情况下会出现此错误。我刚刚在stackblitz.com中使用了一个新的TS项目,其中目标是“esnext”,因此我对@Klesun关于es6是解决方案的第一条评论感到困惑,但我发现此特定代码的另一个解决方法是
Array.from(Array(3).keys())
。当Babel用于编译TypeScript代码,而TypeScript编译器仅用于类型检查时,它就变得有趣了。这就是使用Create React App或Vue CLI创建的项目的情况。我认为在这种情况下,巴贝尔无论如何都会处理“下层迭代”,所以应该在tsconfig.json中激活“下层迭代”。。。但是,在CRA中,在生成项目时未启用。。。
[...Array(3).keys()]  // output: [0, 1, 2]