【问题标题】:es2018 vs es2018.promise vs es2018.regexpes2018 vs es2018.promise vs es2018.regexp
【发布时间】:2018-09-11 22:55:18
【问题描述】:

TypeScript 编译器有 following options 用于 --lib cmd 行 arg:

  • ES2018
  • ES2018.Promise
  • ES2018.RegExp

它们之间有什么区别?如果我只需要 Promisefinally() 支持而不关心其他 ES2018 功能,我应该使用 ES2018 还是 ES2018.Promise

另外,那些ES2018 库支持的TS 版本是什么?当我尝试将它们与 TS 2.6.2 一起使用时,它会抛出:

错误:tsconfig.json(16,13):错误 TS6046:“--lib”选项的参数 必须是:“es5”、“es6”、“es2015”、“es7”、“es2016”、“es2017”、“esnext”、 'dom','dom.iterable','webworker','scripthost','es2015.core', 'es2015.collection','es2015.generator','es2015.iterable', 'es2015.promise'、'es2015.proxy'、'es2015.reflect'、'es2015.symbol'、 'es2015.symbol.wellknown'、'es2016.array.include'、'es2017.object'、 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'esnext.asynciterable'。

【问题讨论】:

  • 正确。 ES2018 包括 AFAIK 对象 rest、Promise.finally 和正则表达式:命名捕获组、lookbehinds、s-flag 和 unicode 脚本属性。

标签: javascript typescript


【解决方案1】:

lib 选项仅提供这些库的类型。如果您指定ES2018,那么即使您的目标是ES2015,您也会输入ES2018。默认情况下,TypeScript 会根据您指定的目标设置一些库,但它允许您从 2.0 版开始手动添加更多类型。

它们之间有什么区别?

它们是不同功能系列的子集。

如果我需要 Promisefinally(),我应该使用 ES2018 还是 ES2018.Promise 仅支持而不关心其他 ES2018 功能?

是的,您可以满足您的需求。但是,如果您包含更多内容,它不会增加您生成的 JavaScript。

从什么 TS 版本开始支持这些 ES2018 库?

如果您使用的目标本身不支持某个功能,您可以下载 (npm) 一个包到 Polyfill。它与 TS 版本没有直接关系。

【讨论】:

  • 感谢您的回答!这是否意味着ES2018.Promise 选项仅支持所有 ES2017 功能 + ES2018 承诺,而不支持 ES2018 的其余功能?
  • 另外关于支持 ES2018 的 TS 版本:请参阅我更新的问题。我认为他们在比 TS 2.6.2 更新的版本中引入了ES2018.* cmd line args。因此,我们必须使用某个最小版本的 TS 才能使用 ES2018 功能。
  • @AlexanderAbakumov 你解决了吗?我试图同时包含es2018es2018.promise,但Promise.finally() 仍然不可用。我是否需要在代码中手动包含一些库?
猜你喜欢
  • 2019-03-06
  • 2020-07-20
  • 2018-11-01
  • 2020-03-30
  • 2018-08-10
  • 2019-03-07
  • 2019-02-18
  • 2018-04-28
  • 2018-12-05
相关资源
最近更新 更多