Typescript不允许扩展类Promise作为异步函数的返回类型

时间:2020-04-06 00:35:51

标签: javascript typescript promise async-await

我有一个从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问题。

1 个答案:

答案 0 :(得分:2)

async函数返回一个内置的Promise。更改函数的返回类型不会改变这一点。

因此,您必须将MyPromise<T>更改为Promise<T>,否则请不要使用async

您当然仍然可以返回MyPromise,这仅意味着您需要停止使用异步。