ES6 作为 angularjs 或 angular2 的 typescript 目标编译器选项
ES6 as the typescript target compiler option for angularjs or angular2
我的 angularjs 应用程序的编译器选项如下。如果我将目标更改为 es6,我是否应该再次使用任何其他包将 es6 转译为 es5?
{
"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"
]
}
目前以 ES5 为目标是基本要求
*根据The ES6 Compatibility Table:
class
在
中不受支持
- Chrome(最新)
- Android(最新)
注意:这只是最新的。 ES6 中的许多可提供可衡量优势的功能仅在最新的浏览器版本中实现。也就是说 backward-compatibility 实际上是不存在的。
可能还有其他一些使用 ES6 可以更好地描述但浏览器不完全支持的用例。
简而言之,在可预见的未来,您应该瞄准 ES5,直到浏览器有机会迎头赶上。
Evan Plaice 的回答很好,但现在已经过时了(写这篇文章时已经将近 18 个月了)。兼容性 table 发生了很大变化,现在可以针对 ES6 (ES2015) 了。检查 table 您需要支持的浏览器。
您选择哪个目标取决于您支持的浏览器。查看 The ES6 Compatibility Table,我们可以制定有关目标的一般准则。只要平台支持大于或等于 TypeScript 支持,那么我们就可以预估我们要针对的是什么:
目标:ES3 - 如果要支持:
- IE8
目标:ES5 - 如果要支持:
- IE11
- (iOS) 野生动物园 9
- Opera Mini
- Android 浏览器
- 可能 Firefox ESR 或 Edge 14。它们实现了 ES6 的 some/most,但可能缺少一些功能。检查您是否需要所述功能或可以 polyfill/shim 它们。
目标:ES6 (ES2015) - 如果您使用这些功能并且希望支持:
- exponentiation (**) operator:Safari 10.0/iOS 10.2
- nested rest destructuring:Safari 10.0/iOS 10.2
目标:ES7 (ES2016) - 如果您使用这些功能并且希望支持:
- async functions:Safari 10.0/iOS 10.2
- Object.getOwnPropertyDescriptors: Safari 10.0/iOS 10.2 (but there is a shim 为)
- String padStart/padEnd: Samsung 6 (also shimmed)
- Trailing commas in function syntax:三星6
- __define/lookupGetter/Setter__: Edge 17, Chrome 61, Samsung 7 (他们只支持一个子集)
目标:ES2017 - 如果您使用这些功能并且希望支持:
- Promise.prototype.finally: Edge 17, Safari 11.0/iOS 11.0, Samsung 7 (shim)
- object rest/spread properties: Edge 18, Safari 11.0/iOS 11.0, 三星 7
- Asynchronous Iterators: Edge 18 或 Safari 11.1/iOS 11.3
目标 ES2018 - 如果您使用这些功能并且希望支持:
- 基本上任何 ES2019+:Edge 18、Samsung 8、Safari 12.0/iOS 11.3
- Object.fromEntries:Chrome72,iOS12.0,三星 10,Opera Mobile 51
- Array.prototype[@@unscopables].flat/flatMap:火狐 66,Chrome72,Safari 12.1/iOS12.2,三星 10,Opera Mobile 51
- Symbol.prototype.description:三星9
- JSON.stringify UTF surrogate pairs: iOS 12.0, 三星 10
目标 ES2019 - 如果您使用这些功能并且希望支持:
- 基本上任何 ES2020+:Samsung 10、Safari 12.1/iOS12.2、Opera Mobile 51
- String.prototype.matchAll: 火狐 66, Chrome 72
- Promise.allSettled: 火狐 71, Chrome 76
- optional chaining operator (?.):Firefox 74,Chrome 80,Safari 13/iOS 13,Opera Mobile 55
- nullish coalescing operator (??):Firefox 72,Chrome 80,Safari 13/iOS 13,Opera Mobile 55
目标 ES2020 - 这让我们只能用浏览器处理所有事情 post:
- 火狐 74+
- Chrome 80+(包括它的 Edgium 80+ 和 Operium 67+ 更名)
- 野生动物园 13.1
希望这能让您了解目标是什么,但测试对于保证您支持所需平台至关重要。兼容性 table 中可能没有一些更小的功能或者我遗漏的东西,所以一定要测试。
我的 angularjs 应用程序的编译器选项如下。如果我将目标更改为 es6,我是否应该再次使用任何其他包将 es6 转译为 es5?
{
"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"
]
}
目前以 ES5 为目标是基本要求
*根据The ES6 Compatibility Table:
中不受支持class
在- Chrome(最新)
- Android(最新)
注意:这只是最新的。 ES6 中的许多可提供可衡量优势的功能仅在最新的浏览器版本中实现。也就是说 backward-compatibility 实际上是不存在的。
可能还有其他一些使用 ES6 可以更好地描述但浏览器不完全支持的用例。
简而言之,在可预见的未来,您应该瞄准 ES5,直到浏览器有机会迎头赶上。
Evan Plaice 的回答很好,但现在已经过时了(写这篇文章时已经将近 18 个月了)。兼容性 table 发生了很大变化,现在可以针对 ES6 (ES2015) 了。检查 table 您需要支持的浏览器。
您选择哪个目标取决于您支持的浏览器。查看 The ES6 Compatibility Table,我们可以制定有关目标的一般准则。只要平台支持大于或等于 TypeScript 支持,那么我们就可以预估我们要针对的是什么:
目标:ES3 - 如果要支持:
- IE8
目标:ES5 - 如果要支持:
- IE11
- (iOS) 野生动物园 9
- Opera Mini
- Android 浏览器
- 可能 Firefox ESR 或 Edge 14。它们实现了 ES6 的 some/most,但可能缺少一些功能。检查您是否需要所述功能或可以 polyfill/shim 它们。
目标:ES6 (ES2015) - 如果您使用这些功能并且希望支持:
- exponentiation (**) operator:Safari 10.0/iOS 10.2
- nested rest destructuring:Safari 10.0/iOS 10.2
目标:ES7 (ES2016) - 如果您使用这些功能并且希望支持:
- async functions:Safari 10.0/iOS 10.2
- Object.getOwnPropertyDescriptors: Safari 10.0/iOS 10.2 (but there is a shim 为)
- String padStart/padEnd: Samsung 6 (also shimmed)
- Trailing commas in function syntax:三星6
- __define/lookupGetter/Setter__: Edge 17, Chrome 61, Samsung 7 (他们只支持一个子集)
目标:ES2017 - 如果您使用这些功能并且希望支持:
- Promise.prototype.finally: Edge 17, Safari 11.0/iOS 11.0, Samsung 7 (shim)
- object rest/spread properties: Edge 18, Safari 11.0/iOS 11.0, 三星 7
- Asynchronous Iterators: Edge 18 或 Safari 11.1/iOS 11.3
目标 ES2018 - 如果您使用这些功能并且希望支持:
- 基本上任何 ES2019+:Edge 18、Samsung 8、Safari 12.0/iOS 11.3
- Object.fromEntries:Chrome72,iOS12.0,三星 10,Opera Mobile 51
- Array.prototype[@@unscopables].flat/flatMap:火狐 66,Chrome72,Safari 12.1/iOS12.2,三星 10,Opera Mobile 51
- Symbol.prototype.description:三星9
- JSON.stringify UTF surrogate pairs: iOS 12.0, 三星 10
目标 ES2019 - 如果您使用这些功能并且希望支持:
- 基本上任何 ES2020+:Samsung 10、Safari 12.1/iOS12.2、Opera Mobile 51
- String.prototype.matchAll: 火狐 66, Chrome 72
- Promise.allSettled: 火狐 71, Chrome 76
- optional chaining operator (?.):Firefox 74,Chrome 80,Safari 13/iOS 13,Opera Mobile 55
- nullish coalescing operator (??):Firefox 72,Chrome 80,Safari 13/iOS 13,Opera Mobile 55
目标 ES2020 - 这让我们只能用浏览器处理所有事情 post:
- 火狐 74+
- Chrome 80+(包括它的 Edgium 80+ 和 Operium 67+ 更名)
- 野生动物园 13.1
希望这能让您了解目标是什么,但测试对于保证您支持所需平台至关重要。兼容性 table 中可能没有一些更小的功能或者我遗漏的东西,所以一定要测试。