Ts ES5/ES3中的一个异步函数或方法需要有‘极限’构造函数

Hello 我在我的 TypeScript 项目中使用异步/等待,但是我得到了这个日志:

[ ts ] ES5/ES3中的异步函数或方法要求使用‘极限’构造函数。请确保您有一个声明’承诺’构造函数或包括’ES2015’在您的 --lib选项。

我怎么才能解决这个问题呢?

102421 次浏览

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

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

更新: 如果这对你不起作用,试试这个:

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

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

Https://github.com/microsoft/typescript/issues/3983#issuecomment-123861491

请尝试这个包,其中包含 es6承诺的类型定义

npm install --save @types/es6-promise

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

  • ECMAScript 版本: ECMAScript 6

  • 模块系统: ES2015

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

Options = > Text Editor = > JavaScript/TypeScript = > Language Service 选项 = > 文本编辑器 = > JavaScript/TypeScript = > 语言服务

重启 VS。

希望这个能帮上忙。

您还可以对该特定错误使用“ lib”: “ es2015.note”

VS2019似乎不能识别 tsconfig.json 文件,因此 LIB 选项不会更改应用程序。这是一种为接受 ASYNC AWAIT 的打印脚本添加 PROMISE 的方法。

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;


}

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

以防有人在他的测试文件里纠结于此。

编辑: 当然,您需要正确配置您的 --lib选项,正如在接受的答案中所概述的那样。我的 tsconfig.json --lib选项的工作原理如下:

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

我终于解开了!
我在终端机上的命令是: 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

tsc --target ES6

这就是我的解决办法!

在 tsconfig.json 中添加“ es2015.note”-in“ lib”= like this:

{
"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"
]
}

在我的例子中,我只是不小心删除了函数中的“ return”语句,这个错误一直在显示,直到我把它放回去。

当您通过 tsc index.ts --watch编译或观察您的打印脚本文件时,将 --lib标志添加到它的值中(在我们的示例中为 es2015) ,它应该如下所示
tsc index.ts --watch --lib es2015
为了更好地工作 tsc index.ts --watch --lib "es2015, es2016, dom"-当它不能从 tsconfig.json 读取 dom 时

除了其他建议添加 lib 的回复如下

...
"lib": ["es2015"],
...

类型脚本服务器也必须重新启动。

在 VisualStudio 代码上,可以使用命令面板选项(Windows 上默认为 CTRL + Shift + P)并搜索 Restart TS Server

我使用的是 JetBrains Rider 2022.2.3,在我的 .csproj项目文件中有以下内容(我没有使用 tsconfig.json文件) :

  <PropertyGroup>
<TypeScriptTarget>ES6</TypeScriptTarget>
</PropertyGroup>

上面的代码意味着我可以很好地编译 TypeScript,但是在我将 TypeScript Language Service 的目标设置为 ES6之前,Rider 仍然显示相同的“ use —— lib 选项”错误消息。设置如下:

enter image description here