javascript - Como posso lidar com o status 204 usando Typescript e fetch?
Estou tentando criar uma requisição POST usando fetch e TypeScript. Mas não consigo criar um manipulador para o status 204.
Eu já tentei retornar uma promessa com valor nulo, mas não funciona.
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 });
Resposta #1
Use um Tipo União para indicar que ou um Promise<T> ou um Promise<null> é retornado:
postRequest = async <T>(url: string, body: any): Promise<T | null> => {
Neste exemplo, o tipo de retorno é Promise<T | null>, o que indica que T ou null serão usados para uma promise resolvida.
Resposta #2
Se você quer que sua função retorne possivelmente null, você tem que adicioná-lo ao tipo de retorno.
postRequest = async <T>(url: string, body: any): Promise<T|null> => {
...
}
E você não precisa aguardar o valor de retorno em uma função assíncrona, a promessa criada já lida com a espera por você:
return response.json() as T;
