javascript - 如何使用 Typescript 和 fetch 处理 204 状态?

标签 javascript typescript fetch

我正在尝试使用 fetch 和 typescript 创建发布请求。 但无法创建 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 });

最佳答案

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

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

在这个例子中,返回类型是Promise<T | null> , 这表示 Tnull将用于已解决的 promise 。

关于javascript - 如何使用 Typescript 和 fetch 处理 204 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938929/

相关文章:

javascript - 类型错误 : Cannot assign to read only property 'exports' of object '#<Object>' in ReactJS

php - 在 Zend Framework 中获取选定的行

fetch - 如何在 fetch Whatwg 中设置 "global" header

javascript - 单击 block 时如何不计算子 block (示例 .child 跨度)?

angular - 如何获取 Angular 2 中的日期格式?

typescript - 将联合类型映射到带参数的类型

javascript - 获取请求不在控制台或前端返回任何数据

javascript - 如何在 typescript 中输入 promise 的回调?

javascript - 将参数传递给 Raphael.js 中的 .mouseover 函数

javascript - UIWebview 如何在 iOS 中进行渲染?