繁体   English   中英

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

[英]Does Typescript transpilation handle transpiling ES6 to ES5?

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

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

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

例如, fill是在ES6中Array的原型中找到的新函数。

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

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

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

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

要解决此问题,您需要在项目的定义文件中向Array<T>接口添加fill

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

并包括一个polyfill 或者使用自动为您做的事情。

是的,如果您将tsconfig.json设置为目标ES5,则可以

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

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

暂无
暂无

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

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