当我使用ES6功能时,例如模板字符串,箭头函数,TypeScript文件中的解构。然后我将文件编译为普通的JavaScript ...
TypeScript编译器是否也编译了ES6语法?或者我是否必须使用其他编译器(Babel)?
答案 0 :(得分:7)
TypeScript编译器是否也编译了ES6语法?或者我是否必须使用其他编译器(Babel)?
我不同意Fylax的回答。 TypeScript编译器不需要额外的工具将ES6语法转换为ES 3或5。
TypeScript编译器将新语法(let
,for … of
,箭头函数,其余参数等)转发到ES 3或5.但它本身并不提供任何polyfill。 。要在旧的VM ES 3或5上使用最新的API(如Promise
),您必须:
这是一个强大的设计选择。使用typeScript,您必须仔细选择所需的polyfill,并在您定位的不同浏览器上测试它们。
默认情况下,当目标是ES 3或ES 5时,编译器不会使用最新ECMAScript API的定义。见the documentation:
注意:如果未指定
--lib
,则会注入默认库。注入的默认库是:►
--target ES5
:dom,es5,scripthost
如果polyfill使API可用,那么我们可以配置编译器来使用它。以下是在ES5 VM上使用promises的配置文件tsconfig.json
的示例:
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "es5", "es2015.promise"]
}
}
但是,Babel可以将一些功能转换为ES 5,而不是TypeScript。请参阅the compatibility table from Kangax。
答案 1 :(得分:2)
您需要其他编译器将您的代码从ES6下载到ES5。
TypeScript非常聪明,可以为您完成大部分工作(即将let
转换为var
或将箭头函数转换为具有正确范围和绑定的标准函数。
在非常罕见的情况下,当您既没有被转换器也不被polyfill覆盖时,您将需要额外的编译器。