Nunca Lança Exceções
Todos os erros são retornados como valores, não exceções. Sem mais blocos try-catch ou lançamentos inesperados.
Inspirado no padrão de tratamento de erros do Go, construído sobre a API Fetch nativa
import { typedFetch, NotFoundError, UnauthorizedError, NetworkError } from '@pbpeterson/typed-fetch';
interface User {
id: number;
name: string;
email: string;
}
// Especifique erros de cliente esperados para melhor segurança de tipos
type ExpectedErrors = NotFoundError | UnauthorizedError;
const { response, error } = await typedFetch<User[], ExpectedErrors>('/api/users');
if (error) {
// Aqui, response é null e error contém o erro específico
if (error instanceof NotFoundError) {
console.log('Usuários não encontrados');
} else if (error instanceof UnauthorizedError) {
console.log('Autenticação necessária');
} else if (error instanceof NetworkError) {
console.log('Erro de rede:', error.message);
} else {
// Erros de servidor (5xx) são sempre incluídos
console.log(`HTTP ${error.status}: ${error.statusText}`);
}
} else {
// Aqui, error é null e response contém o resultado bem-sucedido
const users = await response.json(); // Tipo: User[]
console.log('Usuários:', users);
}
Bibliotecas fetch tradicionais lançam exceções em erros HTTP, tornando o tratamento de erros complicado e propenso a falhas. typed-fetch segue a filosofia do Go de tratamento de erros explícito - erros são valores, não exceções.
try {
const response = await fetch('/api/users');
const users = await response.json(); // E se a resposta for 404?
} catch (error) {
// Lidar com erros de rede, erros de parsing, erros HTTP... tudo misturado
}
import { 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) {
// Aqui: error tem o erro específico, response é null
if (error instanceof NotFoundError) {
console.log('Endpoint de usuários não encontrado');
} else if (error instanceof UnauthorizedError) {
console.log('Autenticação necessária');
} else {
console.log(`Erro do servidor ${error.status}: ${error.statusText}`);
}
const errorDetails = await error.json(); // Acessar corpo da resposta de erro
} else {
// Aqui: response tem os dados, error é null
// TypeScript sabe que response não é null
const users = await response.json(); // Tipo: User[]
}
npm install @pbpeterson/typed-fetch
pnpm add @pbpeterson/typed-fetch
yarn add @pbpeterson/typed-fetch
Confira o guia Primeiros Passos para aprender a usar typed-fetch no seu projeto.