我正在使用Angular 2和TypeScript编写应用程序。我想使用IE 11 +,Chrome 45+等支持的js方法(尤其是数组的'filter')。 我的代码能否在旧版浏览器上运行?由于Typescript转换为vanilla js,我不确定它对ES6功能的作用。
答案 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等,以自动填充这些功能。