我的angularjs应用程序的编译器选项如下。我应该使用其它软件包,transpile ES6到ES5如果我更改了目标再次ES6?
{ "compilerOptions": { "target": "es5", // Change this to es6 "module": "commonjs", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "removeComments": false, "noImplicitAny": false, "outDir": "./wwwroot/app/" }, "exclude": [ "node_modules", "wwwroot" ] }
Jonathan Gaw.. 7
您选择哪个目标取决于您支持的浏览器。查看ES6兼容性表,我们可以针对目标对象制定一般准则。只要平台支持大于或等于TypeScript支持,那么我们就可以估算我们想要的目标。
首先在兼容性表中检查TypeScript版本的差异,我们仅发现一些差异:
TS 2.3 在函数语法中添加了2017的结尾逗号,并在2018的对象剩余/扩展属性和异步迭代器中添加了逗号。
TS 2.5增加了2019年其他可选的catch绑定。
TS 2.7添加了Next Draft的数字分隔符。
现在将TS的功能集与平台进行比较:
目标:ES3-如果您想支持:
IE8-不支持ES5
目标:ES5-如果您想支持:
IE11-不支持ES6
(iOS)Safari 9-不支持ES6
Opera Mini-不支持ES6
Android浏览器-不支持ES6
节点4-不支持ES6
可能是 Firefox ESR或Edge14。它们实现了ES6的部分/大部分功能,但可能缺少一些功能。检查您是否需要所述功能或可以填充/填充它们。
目标:ES6(ES2015) -如果您使用这些功能并且要支持:
Safari 10.0(iOS 10.2)和Node 6.5-本机不支持指数(**)运算符。
Safari 10.0(iOS 10.2)-本机不支持嵌套的其余解构。
目标:ES7(ES2016) -如果您想使用这些功能并且要支持:
Safari 10.0(iOS 10.2)或Node 7.5-本身不支持ES2017的异步功能
Safari 10.0(iOS 10.2)-本机不支持Object。getOwnPropertyDescriptors,但是有一个垫片。
节点<8-本机不支持函数语法中的尾部逗号(注意TS <2.3也不支持)
Edge 17,Chrome 61和Node < 8.10-仅支持__define / lookupGetter / Setter__的子集。
目标:ES2017-如果您想使用这些功能并且要支持:
Edge(最新版本18)或Safari / iOS 11.0-不原生支持ES2018的对象剩余/扩展属性
边缘17或Safari / iOS的11.0 -不支持ES2018的Promise.prototype.finally但它看起来像有一个垫片为
Edge(当前版本18)或Safari 11.1(iOS 11.3)-不本地支持ES2018的异步迭代器
我将把ES2018 / ESNext留给读者练习,或者将来我会更新。可以肯定地说,某些现代浏览器或库不支持某些功能,因为它们可能是试验性的。
希望这可以使您了解目标对象,但是测试对于确保您支持所需平台至关重要。兼容性表中可能没有更小的功能,或者我错过了某些功能,因此请务必进行测试。
您选择哪个目标取决于您支持的浏览器。查看ES6兼容性表,我们可以针对目标对象制定一般准则。只要平台支持大于或等于TypeScript支持,那么我们就可以估算我们想要的目标。
首先在兼容性表中检查TypeScript版本的差异,我们仅发现一些差异:
TS 2.3 在函数语法中添加了2017的结尾逗号,并在2018的对象剩余/扩展属性和异步迭代器中添加了逗号。
TS 2.5增加了2019年其他可选的catch绑定。
TS 2.7添加了Next Draft的数字分隔符。
现在将TS的功能集与平台进行比较:
目标:ES3-如果您想支持:
IE8-不支持ES5
目标:ES5-如果您想支持:
IE11-不支持ES6
(iOS)Safari 9-不支持ES6
Opera Mini-不支持ES6
Android浏览器-不支持ES6
节点4-不支持ES6
可能是 Firefox ESR或Edge14。它们实现了ES6的部分/大部分功能,但可能缺少一些功能。检查您是否需要所述功能或可以填充/填充它们。
目标:ES6(ES2015) -如果您使用这些功能并且要支持:
Safari 10.0(iOS 10.2)和Node 6.5-本机不支持指数(**)运算符。
Safari 10.0(iOS 10.2)-本机不支持嵌套的其余解构。
目标:ES7(ES2016) -如果您想使用这些功能并且要支持:
Safari 10.0(iOS 10.2)或Node 7.5-本身不支持ES2017的异步功能
Safari 10.0(iOS 10.2)-本机不支持Object。getOwnPropertyDescriptors,但是有一个垫片。
节点<8-本机不支持函数语法中的尾部逗号(注意TS <2.3也不支持)
Edge 17,Chrome 61和Node < 8.10-仅支持__define / lookupGetter / Setter__的子集。
目标:ES2017-如果您想使用这些功能并且要支持:
Edge(最新版本18)或Safari / iOS 11.0-不原生支持ES2018的对象剩余/扩展属性
边缘17或Safari / iOS的11.0 -不支持ES2018的Promise.prototype.finally但它看起来像有一个垫片为
Edge(当前版本18)或Safari 11.1(iOS 11.3)-不本地支持ES2018的异步迭代器
我将把ES2018 / ESNext留给读者练习,或者将来我会更新。可以肯定地说,某些现代浏览器或库不支持某些功能,因为它们可能是试验性的。
希望这可以使您了解目标对象,但是测试对于确保您支持所需平台至关重要。兼容性表中可能没有更小的功能,或者我错过了某些功能,因此请务必进行测试。