繁体   English   中英

在TypeScript中使用时,ES6功能是否已编译为ES5?

[英]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 ),您必须:

  1. 加载一个使API可用的polyfill (如es6-promise );
  2. 假设编译器使用此API的标准类型。

这是一个强大的设计选择。 使用typeScript,您必须仔细选择所需的polyfill,并在您定位的不同浏览器上测试它们。

默认情况下,当目标是ES 3或ES 5时,编译器不使用最近ECMAScript API的定义。 查看文档

注意:如果未指定--lib则会注入默认库。 注入的默认库是:

►对于--target ES5dom,es5,scripthost

如果polyfill使API可用,那么我们可以配置编译器来使用它。 以下是在ES5 VM上使用promises的配置文件tsconfig.json的示例:

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "es5", "es2015.promise"]
  }
}

但是,Babel可以将一些功能转换为ES 5,而不是TypeScript。 请参阅Kangax的兼容性表

您需要其他编译器将代码从ES6下载到ES5。

打字稿是相当聪明,会做的大部分工作的你(即翻译letvar或箭头功能标准功能与正确的范围和绑定)。

编辑:正如@Paleo指出的那样,99%你不需要任何外部编译器,因为你可以为TypeScript提供一个额外的库(polyfill),它可以使一切工作正常。

在非常罕见的情况下,当您既没有被转换器也没有被polyfill覆盖时,您将需要额外的编译器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM