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


99

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

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

我该如何解决?

Answers:


146

如错误消息所述,添加lib: es2015到您的tsconfig.json

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

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

默认情况下,JetBrains IDE(例如WebStorm)使用其自己的实现。确保将其配置为使用TypeScript语言服务。

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

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


{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }这是我的tsconfig.json我应该如何编辑?
Sedric Heidarizarei '17

在Visual Studio 2017中的何处指定?它没有tsconfig.json
Akash Kava

1
我做了@katopz,但是VS并不在乎,我发现该csproj文件具有一些额外的xml元素来启用/禁用此类功能。
Akash Kava

3
我必须重新启动我的IDE(WebStorm)才能看到结果。

1
我也必须包括"dom""lib"数组中,否则会出现其他错误。
electrovir

22

试试这个包含es6-promise类型定义的软件包

npm install --save @types/es6-promise


2
“联合”是没有错的,但是您的回答是我遇到的那种问题。谢谢!
tuliomarchetto

12

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

  • ECMAScript版本:ECMAScript 6

  • 模块系统:ES2015


@LukePighetti项目在解决方案探索器中
Ivandro IG Jao


0

VS2019似乎无法识别tsconfig.json文件,因此LIB选项不会更改应用程序。这是一种添加用于打字稿的承诺以接受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;

}

0

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

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

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

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

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


-4

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

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

重新启动VS。

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.