roo*_*sky 5 ecmascript-5 typescript tsconfig webpack babeljs
我正在使用TypeScript
with ,并且对将代码转换为代码Webpack
有疑问。TypeScript
ES5
target
如果我理解正确的话,如果我将选项 (in tsconfig.json
) 设置为ES5
? ,我不需要任何 babel loader。正确的?
如果不是,那么差异在哪里?
答案是:视情况而定。这取决于您要使用 ES6 的哪些功能。TypeScript 可以处理其中的大部分并可以很好地编译为 ES5,但也有一些例外,例如:for..of 循环。for..of 循环是基于迭代器的 ES6 功能。对于每个对象,您可以定义一个方法并将其放在调用的键下[Symbol.iterator]
,for..of 循环将使用该方法来迭代该对象。例如,您可以在此处找到更多信息。但是,如果将 TypeScript 目标设置为 ES5,则这将不起作用。这是因为在 ES5 中,TypeScript 会将循环编译为基本的 for 循环,假设您迭代的对象具有显式属性length
并且是整数索引(如数组)。看例子:
for (const a of someObject) {
//some operations
}
Run Code Online (Sandbox Code Playgroud)
如果你将目标设置为 ES5,这将被编译成
for (var _i = 0; _i < someObject.length; _i++) {
var a = someObject[_i];
//some operations
}
Run Code Online (Sandbox Code Playgroud)
这要求您提供该对象上从到 的length
整数属性。这有点与迭代器的想法相反,在 ES6 中,迭代器允许您自由定义如何迭代对象。0
length-1
总结一下:如果您计划在面向 ES5 的 TypeScript 代码中使用 ES6 功能,请确保它们将被编译为什么。如果输出代码有一些限制,请将目标设置为 ES6 并在结果上使用 Babel。
归档时间: |
|
查看次数: |
1876 次 |
最近记录: |