你是否忘记在“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 中输入异步函数的更多信息,请查看以下文章。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: