TypeScript构建错误:构建:ES5 / ES3中的异步功能或方法需要“承诺”。构造

时间:2018-01-09 09:57:09

标签: typescript

我使用VS2017和TypeScript 2.5.3。

.ts代码如下所示:

class LossEnergyCalculation {

    async initLossEnergyCalculation(): Promise<void> {
        try {
            const response = await fetch("/LossEnergyCalculation/GetOilFieldList");
            const oilFieldsData = await response.json();
    }
    ...
}

在TypeScript Build部分的项目属性中,我设置了:

TypeScript version: 2.5
ECMAScript version: ECMAScript 5
JSX compilation in TSX files: None
Module System: CommonJS

我没有tsconfig.json文件。

当我构建项目时,会出现以下错误:

Build:An async function or method in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.

如何摆脱错误?

1 个答案:

答案 0 :(得分:3)

您必须指定lib选项才能包含Promise声明。在运行时,如果运行时没有对它们的内置支持,您还需要一个用于promises的库。

要指定库,您需要一个tsconfig.json。根据您在问题中指定的内容。这应该等同于您当前的配置

{
  "compilerOptions": {
    "module": "commonjs",
    "sourceMap": true,
    "target": "es5",
    "lib": [ "es2015.promise", "es5", "dom" ]
  }
}

注意我只包含es2015.promise的{​​{1}}和es2015的剩余运行时声明。这可以确保您不会获得es5您不应该使用的功能,并且您只能获得所需的承诺。另外,仅因为包含es2015 lib并不意味着运行时将具有承诺,应该单独处理。