ES6作为angularjs或angular2的typescript目标编译器选项



我的angularjs应用程序的编译器选项如下。如果我将目标更改为es6,我是否应该使用任何其他包再次将es6s5

    {
      "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"
      ]
    }

您选择的目标取决于您支持的浏览器。查看ES6兼容性表,我们可以制定关于目标的通用指南。只要平台支持大于或等于TypeScript支持,那么我们就可以估计我们想要的目标:

目标:ES3-如果您想支持:

  • IE8

目标:ES5-如果您想支持:

  • IE11
  • (iOS)Safari 9
  • Opera Mini
  • Android浏览器
  • 可能Firefox ESR或Edge 14。它们实现了ES6的部分/大部分,但可能缺少一些功能。检查您是否需要上述功能,或者是否可以对其进行polyfill/shim填充

目标:ES6(ES2015)-如果您使用这些功能并且希望支持:

  • 求幂(**)运算符:Safari 10.0/iOS 10.2
  • 嵌套rest销毁:Safari 10.0/iOS 10.2

目标:ES7(ES2016)-如果您使用这些功能并且希望支持:

  • 异步功能:Safari 10.0/iOS 10.2
  • Object.getOwnPropertyDescriptors:Safari 10.0/iOS 10.2(但有一个填充程序)
  • 串焊盘起始/焊盘结束:Samsung 6(也加垫片)
  • 函数语法中的尾随逗号:Samsung 6
  • __define/lookupGetter/Setter_:Edge 17、Chrome 61、Samsung 7(它们只支持一个子集)

目标:ES2017-如果您使用这些功能并且希望支持:

  • Promise.prototype.finally:Edge 17,Safari 11.0/iOS 11.0,Samsung 7(垫片)
  • object rest/spread属性:Edge 18、Safari 11.0/iOS 11.0、Samsung 7
  • 异步迭代程序:Edge 18或Safari 11.1/iOS 11.3

目标ES2018-如果您使用这些功能并且希望支持:

  • 基本上任何ES2019+:边缘18,三星8,Safari 12.0/iOS 11.3
  • Object.from条目:Chrome 72,iOS 12.0,三星10,Opera Mobile 51
  • Array。prototype[@@unscopables]。flat/flatMap:Firefox 66、Chrome 72、Safari 12.1/iOS 12.2、Samsung 10、Opera Mobile 51
  • Symbol.prototype.description:三星9
  • JSON.stringify UTF代理对:iOS 12.0,Samsung 10

目标ES2019-如果您使用这些功能并且希望支持:

  • 基本上任何ES2020+:三星10,Safari 12.1/iOS 12.2,Opera Mobile 51
  • String.prototype.matchAll:Firefox 66、Chrome 72
  • Promise.allSettled:Firefox 71,Chrome 76
  • 可选链接运营商(?.):Firefox 74、Chrome 80、Safari 13/iOS 13、Opera Mobile 55
  • nullish合并运算符(??):Firefox 72、Chrome 80、Safari 13/iOS 13、Opera Mobile 55

targetES2020-这让我们只能用浏览器来处理本文中的所有内容:

  • Firefox 74+
  • Chrome 80+(包括Edgium 80+和Operium 67+品牌)
  • Safari 13.1

希望这能让你知道目标是什么,但测试对于保证你支持你想要的平台至关重要。兼容性表中可能没有较小的功能,或者我错过了一些功能,所以一定要测试一下。

瞄准ES5目前是的基线要求

*根据ES6兼容性表:

  • 中不支持class

    • Chrome(最新)
    • Android(最新)

注意:这只是最新的。ES6的许多功能只在最新的浏览器版本中实现,这些功能将带来可衡量的好处。即向后兼容性实际上是不存在的

使用ES6可能会更好地描述浏览器不完全支持的其他用例。

简而言之,在可预见的未来,您应该以ES5为目标,直到浏览器有机会赶上为止。

Evan Plaice的回答很好,但现在已经过时了(截至撰写本文时已近18个月)。可压缩性表已经发生了很大的变化,现在可以针对ES6(ES2015)。请检查表中需要支持的浏览器。

最新更新