Promise fetch 返回 Promise<void | T> 而不是预期的对象

Dan*_*ndy 1 javascript promise typescript

我正在使用类中的 Typescript 进行简单的获取,它应该返回一个承诺,然后我想从这个获取中获取 JSON 响应。但是,无论我做了什么更改,该函数总是返回 a Promise<void | T>,这会破坏我代码中的类型检查。

export class ApiHelper {
    constructor() {     }

    public FetchFromPortal<T>(xyz: string) {

    ------ Other less relevant code -----------

        return fetch(url, options)
            .then((response) => this.CheckStatus(response))
            .then((response) => this.ParseJSON<T>(response))
            .then((response) => { 
                console.log(response);
                return response;
            })
            .catch((error: Error) => { console.log(error) });
    }

    private CheckStatus(response : Response) : Promise<Response> {
        if (response.status >= 200 && response.status < 300) {
            return Promise.resolve(response);
        } else {
            let error = new Error(response.statusText);
            throw error;
        }
    }

    private ParseJSON<T>(response : Response) {
        return response.json() as Promise<T>;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我随后这样称呼它:

let result = apiHelper.FetchFromPortal<T>(xyz);
Run Code Online (Sandbox Code Playgroud)

根据打字稿,这将返回一个Promise<void | T>. 我试过像这样解决通话中的承诺:

let result = apiHelper.FetchFromPortal<T>(xyz).then(data => { return data });
Run Code Online (Sandbox Code Playgroud)

理论上应该解决Promise这个问题,但这似乎不起作用。

有什么理由不解决承诺只是对象吗?

art*_*tem 5

有什么理由不解决承诺只是对象吗?

原因如下:

        })
        .catch((error: Error) => { console.log(error) });
Run Code Online (Sandbox Code Playgroud)

当异常发生时,此处理程序将错误记录到控制台并且不返回任何内容。编译器看到这一点并将void联合成员添加到返回类型。