ts ES5 / ES3中的异步函数或方法需要'Promise'构造函数

时间:2017-04-22 04:53:32

标签: typescript async-await

您好我在我的TypeScript项目中使用async / await,但是我得到了这个日志:

[ts] ES5 / ES3中的异步函数或方法需要'Promise'构造函数。确保您拥有“承诺”构造函数的声明,或在--lib选项中包含“ES2015”。

我该如何解决?

10 个答案:

答案 0 :(得分:114)

如错误消息所示,将lib: es2015添加到tsconfig.json

// tsconfig.json
{
  "compilerOptions": {
    "lib": [ "es2015" ]
  }
}

更新:如果这对您不起作用,请尝试以下方法:

WebStorm等JetBrains IDE默认使用自己的实现。确保将其配置为使用TypeScript语言服务。

对于Visual Studio,项目文件和tsconfig.json是互斥的。您需要直接配置项目。

https://github.com/Microsoft/TypeScript/issues/3983#issuecomment-123861491

答案 1 :(得分:20)

试试这个包含es6-promise

类型定义的包

npm install --save @types/es6-promise

答案 2 :(得分:3)

如果您在VS上,请删除tsconfig.json并在解决方案资源管理器中右键单击该项目,然后单击属性 - >一般的TypeScript构建更改以下内容

  • ECMAScript版本:ECMAScript 6

  • 模块系统:ES2015

答案 3 :(得分:2)

对我来说,该错误发生在src/tests文件夹中的测试文件中。由于我使用ts-node直接测试.ts文件,因此在src/tests/*中排除了tsconfig.json。我删除该行后,错误就消失了(最后说得通)。

以防万一其他人正在他的测试文件中为此苦苦挣扎。

编辑:当然,您需要按照接受的答案中的说明正确配置--lib选项。我的tsconfig.json --lib选项的工作方式如下:

"lib": [
    "es2018",
    "dom"
]

答案 4 :(得分:0)

VS2019似乎无法识别tsconfig.json文件,因此LIB选项不会更改应用程序。这是为打字稿添加PROMISE以接受ASYNC AWAIT的方法。

export function AD(first: any, second: any, callBack: any)
{
    const rtn = async (dispatch: any): Promise<void> =>
    {
        await axios.post(TYPE.URI, { // provide a string of a URI to post into
            parm1: first,
            parm2: second
        })
            .then(data => // or you can use response instead of data as a name
            {
                console.log("data from call next");
                console.log(data);
                dispatch({ type: TYPES.AD, payload: data.data });
                if (callBack)
                {
                    callBack(data);
                }
            })
    }
    return rtn;

}

答案 5 :(得分:0)

我终于设法解决了!
我在终端上的命令: yarn tsc main.ts && nodejs main.js 我的错误消息:

main.ts:1:16 - error TS2705: 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 async function main() {
                 ~~~~


Found 2 errors.

error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

我要解决的问题是引用tsconfig.json文件。
我的tsconfig.json文件是这样的:

{
    "compilerOptions": {
        "target": "ESNext",
        "lib": [
            "ES2015",
            "DOM"
        ]
    }
}

我的终端命令是这样的: yarn tsc -p ./tsconfig.json && nodejs main.js 如果我想运行其他.ts文件,只需执行以下操作: yarn tsc -p ./tsconfig.json && nodejs file_name.js

答案 6 :(得分:0)

tsc --target ES6

这就是我的解决方案!

答案 7 :(得分:0)

在 tsconfig.json 中添加“es2015.promise” - 在“lib”中=像这样:

{
    "compilerOptions": {
        "target": "es5",
        "lib": [
            "es5",
            "dom",
            "es2015.promise"
        ],
        "types": [
            "mocha"
        ],
        "module": "commonjs",
        "outDir": "../../../out",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "sourceMap": true,
        "declaration": true
    },
    "exclude": [
        "node_modules",
        "dist",
        "tests"
    ]
}

答案 8 :(得分:0)

就我而言,我只是不小心删除了函数中的“return”语句,此错误一直显示,直到我把它放回去。

答案 9 :(得分:-3)

我在Angular 4项目中使用VS2017 v15.8.2和Typescript 2.4.2(在我的解决方案中的类库项目下,而不是Typescript项目下)。 通过禁用 JavaScript语言服务,我可以消除VS中的错误/警告:

选项=>文本编辑器=> JavaScript / TypeScript =>语言服务

重新启动VS。

希望这会有所帮助。