Skip to content

Uso Avançado

Corpos de Resposta de Erro

typescript
import { typedFetch, BadRequestError } from '@pbpeterson/typed-fetch';

// Requisições POST comumente esperam BadRequestError para falhas de validação
const { response, error } = await typedFetch<User, BadRequestError>('/api/users', {
  method: 'POST',
  body: JSON.stringify(invalidData)
});

if (error) {
  if (error instanceof BadRequestError) {
    const validationErrors = await error.json();
    console.log('Detalhes do erro de validação:', validationErrors);
  } else {
    // Erros de servidor ou erros de rede
    const errorBody = await error.json();
    console.log('Detalhes do erro do servidor:', errorBody);
  }
  
  const contentType = error.headers.get('content-type');
  console.log(`Erro ${error.status}: ${error.statusText}`);
}

Erros de Rede vs HTTP

typescript
import { typedFetch, NetworkError, NotFoundError, UnauthorizedError } from '@pbpeterson/typed-fetch';

// Especifique erros esperados para melhor segurança de tipos
type ExpectedErrors = NotFoundError | UnauthorizedError;
const { response, error } = await typedFetch<User, ExpectedErrors>('/api/users');

if (error) {
  if (error instanceof NetworkError) {
    console.log('Problema de rede - verifique a conexão');
  } else if (error instanceof NotFoundError) {
    console.log('Usuário não encontrado');
  } else if (error instanceof UnauthorizedError) {
    console.log('Autenticação necessária');
  } else {
    // Erros de servidor (5xx)
    console.log(`Erro do servidor: ${error.status}`);
  }
}

RequestInit Opcional

O segundo parâmetro é opcional, mas você ainda deve especificar erros esperados.

typescript
import { typedFetch, NotFoundError, UnauthorizedError } from '@pbpeterson/typed-fetch';

// Mesmo com uso mínimo, especifique erros esperados para melhor segurança de tipos
type ExpectedErrors = NotFoundError | UnauthorizedError;
await typedFetch<User[], ExpectedErrors>('/api/users');

Lançado sob a Licença MIT.