Tratamento de Erros
Typed Fetch fornece classes de erro específicas como exports individuais para otimização de tree-shaking.
Classes de Erro Disponíveis
A biblioteca fornece cobertura abrangente dos códigos de status de erro HTTP. Para informações detalhadas sobre cada código de status, veja a Referência de Status HTTP do MDN.
Erros 4xx do Cliente:
- BadRequest (400)
- PaymentRequired (402)
- Unauthorized (401)
- Forbidden (403)
- NotFound (404)
- MethodNotAllowed (405)
- NotAcceptable (406)
- ProxyAuthenticationRequired (407)
- RequestTimeout (408)
- Conflict (409)
- Gone (410)
- LengthRequired (411)
- PreconditionFailed (412)
- RequestTooLong (413)
- RequestUriTooLong (414)
- UnsupportedMediaType (415)
- RequestedRangeNotSatisfiable (416)
- ExpectationFailed (417)
- ImATeapot (418)
- MisdirectedRequest (421)
- UnprocessableEntity (422)
- Locked (423)
- FailedDependency (424)
- UpgradeRequired (426)
- PreconditionRequired (428)
- TooManyRequests (429)
- RequestHeaderFieldsTooLarge (431)
- UnavailableForLegalReasons (451)
Erros 5xx do Servidor:
- InternalServer (500)
- NotImplemented (501)
- BadGateway (502)
- ServiceUnavailable (503)
- GatewayTimeout (504)
- HttpVersionNotSupported (505)
- InsufficientStorage (507)
- NetworkAuthenticationRequired (511)
Erros de Rede:
- Network
Exemplo
typescript
import { typedFetch, NotFoundError, UnauthorizedError, NetworkError } from '@pbpeterson/typed-fetch';
// Especifique erros de cliente esperados para este endpoint
type ExpectedErrors = NotFoundError | UnauthorizedError;
const { response, error } = await typedFetch<User, ExpectedErrors>('/api/users/123');
if (error) {
if (error instanceof NotFoundError) {
console.log('Usuário não encontrado');
// Acessar corpo da resposta de erro
const details = await error.json();
console.log('Detalhes do erro:', details);
} else if (error instanceof UnauthorizedError) {
console.log('Por favor, faça login');
// Acessar corpo da resposta de erro com clone para múltiplas leituras
const message = await error.clone().text();
console.log('Mensagem de erro de autenticação:', message);
} else if (error instanceof NetworkError) {
console.log('Erro de rede:', error.message);
} else {
// Erros de servidor (5xx) - sempre incluídos
console.log('Erro do servidor:', error.statusText);
// Acessar dados de resposta em diferentes formatos
try {
const errorData = await error.json();
console.log('Detalhes do erro do servidor:', errorData);
} catch {
const errorText = await error.clone().text();
console.log('Texto do erro do servidor:', errorText);
}
}
}Tipos de Erro de Cliente Específicos
Você pode especificar erros de cliente esperados usando genéricos.
typescript
import { NotFoundError } from '@pbpeterson/typed-fetch';
type ExpectedErrors = NotFoundError;
const result = await typedFetch<User, ExpectedErrors>('/api/users/123');
const { response, error } = result;
if (error) {
// Aqui, response é null,
// e error é NotFoundError | ServerErrors | NetworkError
console.log('Ocorreu um erro:', error.statusText);
} else {
// Aqui, error é null, e response é TypedResponse<User>
// TypeScript sabe que response não é null
const user = await response.json(); // Tipo: User
}