【发布时间】:2021-08-07 05:45:20
【问题描述】:
在打字稿中
我怎样才能返回任何一种类型的承诺
Promise<void>
要么
Promise<any>
我试过了
Promise<void | any>Promise<void> | Promise<any>
产生的错误是Promise<void | any>:
error TS2794: Expected 1 arguments, but got 0. Did you forget to include 'void' in your type argument to 'Promise'?
我在从 Angular 11 -> 12 升级时遇到了这个错误。这个 TypeScript 版本现在在没有提供 Promise 类型时会抛出这个错误。
请参阅下面的示例类型错误...
type SpecialPromise = (number: number) => Promise<void>;
const returnsSomething: SpecialPromise = (number: number) => {
return new Promise((resolve) => setTimeout(() => resolve(number), 2000));
};
const returnsVoid: SpecialPromise = (number: number) => {
return new Promise((resolve) => setTimeout(() => resolve(), 2000));
};
Promise.all([
returnsSomething(Math.random()),
returnsVoid(Math.random())
]).then((numbers) => console.log(numbers));
问题是当我创建一个新的承诺时,它默认需要一个类型。 void (nothing) 不是类型。
new <T>(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): Promise<T>;
一个简单的解决方法是在创建 Promise 时指定类型。
new Promise<void>
但如果我决定使用,我仍然会收到错误:
new Promise<void | any>
【问题讨论】:
-
ActionMetadata是否扩展ActionTrigger?请发布minimal reproducible example 和完整的错误消息。 -
@Bergi 我将问题更新为一般性并举了一个例子。
-
该错误消息似乎与调用
resolve函数有关,而不是类型声明。您能否在您的问题中发布完整的代码?
标签: angular typescript promise