我试图了解 Typescript 编译器何时会转译代码以使其与我指定的目标 ECMAScript 版本(ES5 或 ES3)兼容。
例如,TSC 将转译for(var int of intArray)
很好,但它不转译Number.isInteger()
(根据说法,这是 ES6 的一项功能w3学校 https://www.w3schools.com/jsref/jsref_isinteger.asp).
Number.isInteger()
IE
什么可以被转译,什么不会?我最初预计所有内容都会被转译,这样我就不必跟踪这样的事情,但事实似乎并非如此。
打字稿转译物但不polyfill。因此,一种思考方式是,任何在你的代码中无效的语法target
将转译的到有效的语法。例如,当使用class
您的目标设置为的关键字ES5
,它将转译:
class Greeter {
}
to this:
var Greeter = /** @class */ (function () {
function Greeter() {
}
return Greeter;
}());
(你可以用这个来玩更多here http://www.typescriptlang.org/play/.)
另一方面,它不会添加缺失的功能,而您必须这样做polyfill你自己。Number.isInteger()
已验证ES5
语法,它只是不存在于ES5
。您可以通过导入来自行填充它babel-polyfill https://babeljs.io/docs/usage/polyfill/(它使用core-js https://github.com/zloirock/core-js在引擎盖下)或使用类似的服务polyfill.io https://polyfill.io/v2/docs/.
Note:不要混淆lib
带有polyfills的选项。这does not填充特性。它只是告诉 TypeScript 表现得好像这些 ES 版本的功能都存在,因此它会适当地对它们进行类型检查。对于您支持的浏览器,您仍然需要自己处理 polyfill 部分。如果您没有指定适当的lib
s,TypeScript 会抱怨它不知道什么Number.isInteger()
代表。
我不知道 TypeScript 转译功能的完整列表,但您可以查看 TypeScript+ 的表格core-js
填充物here http://kangax.github.io/compat-table/es6/。
更多关于polyfills vs transpilation 的阅读here https://hackernoon.com/polyfills-everything-you-ever-wanted-to-know-or-maybe-a-bit-less-7c8de164e423.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)