如何使用Typescript和访存处理204状态?

时间:2019-09-14 20:11:35

标签: javascript typescript fetch

我正在尝试使用访存和打字稿创建发布请求。 但是无法创建204状态处理程序。

我已经尝试过返回带有空值的promise,但是它不起作用。

    postRequest = async <T>(url: string, body: any): Promise<T> => {
        const response = await fetch(url, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json;charset=utf-8'
            },
            body: JSON.stringify(body)
        });

        // here is my problem
        if (response.status === 204) {
            // error is: "Type 'null' is not assignable to type 'T'."
            return null;
            // I have tried to return promise, but it doesn't work.
            // error is: "Argument of type 'null' is not assignable to 
            // parameter of type 'T | PromiseLike<T> | undefined'."
            return new Promise(resolve => resolve(null));
        }

        if (!response.ok) {
            throw new Error(response.statusText);
        }

        return await response.json() as Promise<T>;
    };


    postRequest<{data: boolean}>('request', { someValue: 1234 });

2 个答案:

答案 0 :(得分:1)

如果您希望函数返回null,则必须将其添加到返回类型。

postRequest = async <T>(url: string, body: any): Promise<T|null> => {
...
}

并且您不需要在异步函数中等待返回值,创建的promise已经为您处理了等待:

return response.json() as T;

答案 1 :(得分:1)

使用Union Type表示将返回Promise<T>Promise<null>

postRequest = async <T>(url: string, body: any): Promise<T | null> => {

请注意,返回类型为Promise<T | null>,这表示Tnull将用于已解决的承诺。