我正在使用Angular 2和TypeScript编写应用程序.我想使用IE 11,Chrome 45等支持的js方法(尤其是数组的’filter’).
我的代码能否在旧版浏览器上运行?由于Typescript转换为vanilla js,我不确定它对ES6功能的作用.
我的代码能否在旧版浏览器上运行?由于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环境中不存在该功能:
error TS2399: Property ‘fill’ does not exist on type ‘string[]’.
要解决此问题,您需要将填充添加到数组< T>项目定义文件中的接口:
interface Array<T> { fill(value: T,start?: number,end?: number): this; }