您是否忘记在“Promise”的类型参数中包含“void”

你是否忘记在“Promise”的类型参数中包含“void”

Did you forget to include ‘void’ in your type argument to ‘Promise’

Promise当我们使用构造函数而不向其传递参数时,会出现错误“预期有 1 个参数,但得到了 0。您是否忘记在 Promise 的类型参数中包含 ‘void’” 。

Promise要解决该错误,请使用泛型键入to
的值
void

下面是错误如何发生的示例。

索引.ts
function getPromise() { return new Promise((resolve, reject) => { // ⛔️ Error: Expected 1 arguments, but got 0. // Did you forget to include 'void' in your type argument to 'Promise'?ts(2794) resolve(); }); }

我们使用了
Promise()
构造函数,但没有用值解析它。

默认情况下,Promise构造函数采用 1 个类型的参数,因此我们应该向其传递一个参数或更新其参数的类型。 unknown

Promise输入to的值void来解决错误

要解决这种特定情况下的错误,请传递void给构造函数的泛型
Promise

索引.ts
function getPromise() { // 👇️ type Promise value as void return new Promise<void>((resolve, reject) => { resolve(); }); }

void类型表示不返回任何内容的函数的返回值。

当函数定义具有void
返回类型时,这意味着该函数不能返回任何内容。

如果您需要Promise使用其他类型的值来解析 ,请将特定类型传递给泛型

索引.ts
function getPromise() { return new Promise<number>((resolve, reject) => { resolve(1000); }); }

上面的 Promise 只能用数字来解决。

我还写了一篇详细的文章,介绍
如何声明具有 Promise 返回类型的函数

如果 Promise 可以通过多种类型得到解析,则使用联合类型

如果您的 Promise 可能会通过多种类型得到解决,请使用
联合类型

索引.ts
function getPromise() { return new Promise<number | string>((resolve, reject) => { if (Math.random() > 0.5) { resolve(1000); } resolve('bobbyhadz.com'); }); }

示例中的 Promise 可以使用number
类型的值来解析
string

请注意,如果必须指定返回 Promise 的函数的返回类型,则还应该使用 Promise 泛型。

索引.ts
async function getPromise(): Promise<string> { return 'bobbyhadz.com'; }

我们在示例中声明了一个异步函数。

无论您从async函数返回什么,它都会被包装在Promise. 换句话说,async 函数总是会返回一个Promise.

如果您需要显式输入函数的返回类型,则必须使用泛型,
Promise就像我们在前面的示例中所做的那样。

如果您想了解有关如何在 TypeScript 中输入异步函数的更多信息,请查看以下文章

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: