Skip to content

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
}

Lançado sob a Licença MIT.