我正在尝试使用访存和打字稿创建发布请求。 但是无法创建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 });
答案 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>
,这表示T
或null
将用于已解决的承诺。