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');