Typescript转换是否可以将ES6转换为ES5?

时间:2016-12-15 20:58:18

标签: javascript angular typescript

我正在使用Angular 2和TypeScript编写应用程序。我想使用IE 11 +,Chrome 45+等支持的js方法(尤其是数组的'filter')。 我的代码能否在旧版浏览器上运行?由于Typescript转换为vanilla js,我不确定它对ES6功能的作用。

2 个答案:

答案 0 :(得分:13)

TypeScript允许您使用ES6中的新语言功能,它会将这些语言功能转换为ES5;但是,它不会为ES6中存在的内置函数添加polyfill,但在ES5中不存在。

如果您使用仅存在于ES6中且面向ES5的内置函数,则需要包含必要的polyfill,以便代码在ES5环境中工作。

示例

例如,fill是ES6中Array原型上的新功能。

const result = ["first", "second"].fill("all");

当你以ES6为目标时,一切都很好。编译器将包含带有fill定义的 lib.es6.d.ts ,而不是抱怨,因为它假定您将在fill函数的ES6环境中运行代码存在。

但是,当您定位ES5时,它不会包含 lib.es6.d.ts ,并会告诉您ES5环境中不存在该功能:

  

错误TS2399:'string []'类型中不存在属性'fill'。

要解决此问题,您需要将fill添加到项目定义文件中的Array<T>界面:

interface Array<T> {
    fill(value: T, start?: number, end?: number): this;
}

并加入polyfill。或者使用自动为您做的事情。

答案 1 :(得分:-1)

是的,如果你将tsconfig.json设置为目标ES5

在tsconfig.json编译器选项中设置target: "ES5"或在CLI设置--target ES5

至于ES6,IDK的内置功能,但我会将babel-loader添加到webpack,grunt,gulp等,以自动填充这些功能。