2016-12-15 437 views
4

我写的用角2和打字稿的应用程序。我想用一个js方法(特别是“过滤器”的阵列),它支持IE 11+,铬45+等 将我的代码能够在旧的浏览器上运行?当Typescript转换为vanilla js时,我不确定它如何处理ES6功能。Typescript转换是否将ES6转换为ES5?

+0

http://www.typescriptlang.org/play/index.html – Sasxa

+1

['Array.filter()'](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux /阵列/过滤器)与IE 9+和所有其他浏览器兼容。它不是用ES6 – nicovank

+1

请注意,这种方法可以通过polyfills加入,也介绍;你不一定需要翻译。 – jonrsharpe

回答

9

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

如果您使用的是内置的,只有在ES6存在,并都瞄准ES5功能,那么你将需要包括为了必要的polyfills为代码在ES5环境中工作。

例如,fillArray的原型在ES6发现了一个新的功能。

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

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

当你的目标ES5,但是,它不包括lib.es6.d.ts并会告诉你,这个功能并没有在ES5环境中存在:

错误TS2399:房产“填充'在类型'string []'上不存在。

为了解决这个问题,你需要添加fillArray<T>接口的定义文件在您的项目:

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

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

0

是的,它可以的,如果你设置tsconfig.json目标ES5

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

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