[英]Are ES6 features compiled to ES5 when used within TypeScript?
当我使用ES6功能时,例如模板字符串,箭头函数,TypeScript文件中的解构。 然后我将文件编译为普通的JavaScript ...
TypeScript编译器是否也编译了ES6语法? 或者我是否必须使用其他编译器(Babel)?
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的定义。 查看文档 :
注意:如果未指定
--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。 请参阅Kangax的兼容性表 。
您需要其他编译器将代码从ES6下载到ES5。
打字稿是相当聪明,会做的大部分工作的你(即翻译let
到var
或箭头功能标准功能与正确的范围和绑定)。
编辑:正如@Paleo指出的那样,99%你不需要任何外部编译器,因为你可以为TypeScript提供一个额外的库(polyfill),它可以使一切工作正常。
在非常罕见的情况下,当您既没有被转换器也没有被polyfill覆盖时,您将需要额外的编译器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.