TypeScript 'target' and Babel



我正在使用TypeScriptWebpack,我对将TypeScript代码转译为ES5代码有疑问。

如果我理解正确,如果我将target选项(tsconfig.json)设置为ES5?右?

如果不是,那么区别在哪里?

答案是:视情况而定。这取决于您将使用ES6的哪些功能。TypeScript 处理了其中的大多数,并编译到 ES5 很好,但也有一些例外,例如:for..的循环。为。。循环是基于迭代器的 ES6 功能。对于每个对象,您可以定义一个方法并将其放在名为[Symbol.iterator]的键下,此方法将由 for. 使用。的循环以迭代对象。例如,您可以在此处找到更多信息。但是,如果将 TypeScript 目标设置为 ES5,这将不起作用。这是因为在 ES5 的情况下,TypeScript 会将循环编译为基本的 for 循环,假设您迭代的对象具有显式length属性并且是整数索引的(如数组)。看例子:

for (const a of someObject) {
//some operations
}

如果将目标设置为 ES5,这将编译为

for (var _i = 0; _i < someObject.length; _i++) {
var a = someObject[_i];
//some operations
}

要求您提供从该对象0length-1length和整数属性。这与迭代器的想法相反,在 ES6 中,迭代器允许您自由定义如何迭代对象。

总而言之:如果您计划在以 ES5 为目标的 TypeScript 代码中使用 ES6 功能,请确保它们将被编译为什么。如果输出代码有一些限制,请将目标设置为 ES6 并在结果上使用 Babel。

最新更新