【问题标题】:Async functions are only available when targeting ECMAScript 2015 or higher异步函数仅在面向 ECMAScript 2015 或更高版本时可用
【发布时间】:2017-04-11 17:52:24
【问题描述】:

我希望能够使用 async 关键字,但我希望我的 typescript 能够编译成 es5 代码,以便我的代码可以在普通人的浏览器中运行。当我尝试在 Visual Studio 代码中使用 async 时出现此错误。

异步函数仅在面向 ECMAScript 2015 或 更高。

我认为定位es6意味着编译打字稿的输出javascript将是es6,而es6在大多数浏览器上都不起作用?

这是我的tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "lib": ["es2015", "dom"],
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": true,
    "outDir":"js/app/",
    "typeRoots": [
      "./node_modules/@types"
    ]
  },
    "exclude": [
    "node_modules",
    "app/test"
  ]
}

我想知道 lib 字段是否可以使它工作,因为它说 "es2015" 但它没有。

我也在想也许core-js shim 使async 可用,但我只在我的index.html 中包含该 shim,如下所示:

<script src="node_modules/core-js/client/shim.min.js"></script>

所以我认为它不会使async 在编译时可用。有没有更好的导入 core-js 的方法?

如何使async 可用,但又不让我的代码无法在大多数浏览器上运行?

【问题讨论】:

  • 这应该可以在 Typescript 2.1 中使用,现在很快就会实现......
  • core-js 是 polyfill。 asynces6 目标依赖于生成器。它们不能被填充。通常 Babel 应该与 TS 一起使用,以将它们转译为 ES5。如前所述,async for es5 目标在 2.1 开发版本中可用。

标签: angular typescript ecmascript-6 async-await


【解决方案1】:

大多数主流浏览器都支持ECMAScript6

正如@loganfsmyth 对此答案的 cmets 所述,

请记住,“大多数主要浏览器”仍然只能涵盖 您的用户群中的一小部分。

Firefox

Chrome

From Safari's website,

ES6 ECMAScript 2015 标准,也称为 ES6,完全是 支持,将这一重大的 JavaScript 演变带到 macOS 上的 Safari 和 iOS。

你将不得不改变,

"target": "es5",

"target": "es6",

ES6 目标中的 TypeScript 1.7 async/await 支持(Node v4+) TypeScript 现在支持引擎的异步函数 对 ES6 生成器的原生支持,例如节点 v4 及更高版本。 异步函数以 async 关键字为前缀;等待 暂停执行,直到异步函数返回承诺 实现并从返回的 Promise 中解包值。

【讨论】:

  • 请记住,“大多数主流浏览器”仍然只能覆盖一小部分用户群。
猜你喜欢
  • 2017-06-29
  • 2021-07-05
  • 2017-04-22
  • 2018-03-14
  • 2019-03-21
  • 2020-03-07
  • 1970-01-01
  • 2017-02-12
  • 2021-05-23
相关资源
最近更新 更多