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

时间:2016-11-24 06:24:38

标签: javascript typescript ecmascript-6

当我使用ES6功能时,例如模板字符串,箭头函数,TypeScript文件中的解构。然后我将文件编译为普通的JavaScript ...

TypeScript编译器是否也编译了ES6语法?或者我是否必须使用其他编译器(Babel)?

2 个答案:

答案 0 :(得分:7)

  

TypeScript编译器是否也编译了ES6语法?或者我是否必须使用其他编译器(Babel)?

我不同意Fylax的回答。 TypeScript编译器不需要额外的工具将ES6语法转换为ES 3或5。

TypeScript编译器将新语法(letfor … of,箭头函数,其余参数等)转发到ES 3或5.但它本身并不提供任何polyfill。 。要在旧的VM ES 3或5上使用最新的API(如Promise),您必须:

  1. 加载使API可用的polyfill(如es6-promise);
  2. 假设编译器使用此API的标准类型。
  3. 这是一个强大的设计选择。使用typeScript,您必须仔细选择所需的polyfill,并在您定位的不同浏览器上测试它们。

    默认情况下,当目标是ES 3或ES 5时,编译器不会使用最新ECMAScript API的定义。见the documentation

      

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

         

    --target ES5dom,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或将箭头函数转换为具有正确范围和绑定的标准函数。

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

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