我有一个从Promise全局类扩展的类,并且应该具有一些常规和异步功能。 像“ init”这样的正常功能可以正常工作,但像“ doSomething”这样的异步功能却不可以。
它总是抛出以下打字错误:
异步函数或方法的返回类型必须为全局Promise类型。
我不知道为什么它不起作用。这是我正在处理的代码。
class MyPromise<T> extends Promise<T> {
private somedata = {};
constructor(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void) {
super(executor);
}
public static init<T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): MyPromise<T> {
return new MyPromise(executor);
}
public async doSomething(fnc: () => Promise<number>): MyPromise<T> {
this.somedata = await fnc();
return this;
}
}
更新:@Evert是正确的,这是一个XY问题。
答案 0 :(得分:2)
async
函数返回一个内置的Promise。更改函数的返回类型不会改变这一点。
因此,您必须将MyPromise<T>
更改为Promise<T>
,否则请不要使用async
。
您当然仍然可以返回MyPromise,这仅意味着您需要停止使用异步。