异步功能仅在定位ECMAScript 2015或更高版本时可用

时间:2016-11-28 04:03:50

标签: angular typescript ecmascript-6 async-await

我希望能够使用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垫片可能async可用,但我只在我的index.html中加入了这样的垫片:

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

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

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

1 个答案:

答案 0 :(得分:11)

ECMAScript6在大多数主流浏览器中都受支持。

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

  

请记住&#34;大多数主流浏览器&#34;仍然只能覆盖一个   很小比例的用户群。

Firefox

Chrome

From Safari's website

  

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

你将不得不改变,

"target": "es5",

"target": "es6",
  

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