我正在编写一个Typescript / React / Redux应用程序,它利用了现代ES6功能,如生成器和对象传播 .
我目前正在将我的tsconfig.json目标设置为 ES5 ,并在我的应用程序中包含 babel-polyfill .
ES5
babel-polyfill
由于ES6在大多数浏览器中都是faster而不是ES5,我更倾向于从我的Typescript配置中定位ES6 . 但是,我担心我将无法支持尽可能多的浏览器 .
babel-polyfill是否提供与转换为ES5目标相同水平的ES5支持?
没有 .
babel-polyfill添加缺失的ES6 runtime classes and methods . 例如,如果运行脚本的浏览器没有 Promise 或 Array.prototype.includes ,则会将这些实现添加到全局范围中,以便在代码尝试使用它们时存在 .
Promise
Array.prototype.includes
它无法为浏览器添加缺少对ES6 syntax 的支持 . 如果您的JavaScript代码包含ES6语法(例如 class , ... 或 yield ),那么ES5浏览器将 fail to parse your code . 运行时没有额外的JavaScript代码可以改变浏览器解析代码的方式,因此polyfill对此没有帮助 .
class
...
yield
底线:如果您想使用ES6语法并仍然支持ES5浏览器,则必须将代码转换为ES5(通过从TypeScript定位ES5,或使用Babel转换) .
简而言之,不,babel-polyfill不提供与转化相同水平的ES5支持 . documentation声明它包含自定义再生器运行时以及core-js .
您可以查看core-js以查看它包含您需要的polyfill . 但是,对象扩展语法不能被填充,只能被转换 .
2 回答
没有 .
babel-polyfill添加缺失的ES6 runtime classes and methods . 例如,如果运行脚本的浏览器没有
Promise
或Array.prototype.includes
,则会将这些实现添加到全局范围中,以便在代码尝试使用它们时存在 .它无法为浏览器添加缺少对ES6 syntax 的支持 . 如果您的JavaScript代码包含ES6语法(例如
class
,...
或yield
),那么ES5浏览器将 fail to parse your code . 运行时没有额外的JavaScript代码可以改变浏览器解析代码的方式,因此polyfill对此没有帮助 .底线:如果您想使用ES6语法并仍然支持ES5浏览器,则必须将代码转换为ES5(通过从TypeScript定位ES5,或使用Babel转换) .
简而言之,不,babel-polyfill不提供与转化相同水平的ES5支持 . documentation声明它包含自定义再生器运行时以及core-js .
您可以查看core-js以查看它包含您需要的polyfill . 但是,对象扩展语法不能被填充,只能被转换 .