Typescript не позволяет расширенному обещанию класса быть возвращаемым типом функции asyn c - PullRequest
1 голос
/ 06 апреля 2020

У меня есть класс, который расширен от глобального класса Promise и должен иметь несколько дополнительных функций normal и asyn c. Нормальные функции, такие как «init», работают, но асин c, такой как «doSomething», не работает.

Всегда выдает следующую ошибку машинописи:

Возвращаемый тип asyn c функция или метод должны иметь глобальный тип 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 Ответ

2 голосов
/ 06 апреля 2020

Функция async возвращает встроенное обещание. Изменение типа возврата функции не меняет этого.

Таким образом, вы должны изменить MyPromise<T> на Promise<T> или не использовать async.

Конечно, вы все равно можете вернуть MyPromise , это просто означает, что вам нужно прекратить использование asyn c.

...