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]