Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
No desenvolvimento de APIs ou integrações, garantir que os parâmetros estejam alinhados com os tipos esperados do Axios é essencial para evitar bugs em produção.
Recentemente, me deparei com uma dúvida parecida: como criar um schema com Zod que valide se um valor é compatível com o tipo Method do Axios? É uma questão prática que mostra como integrar validações de tipos do TypeScript com validações de runtime.
O tipo Method do Axios inclui valores como 'get', 'post', 'put', entre outros, além de variações em maiúsculas. Para validar isso com Zod, uma abordagem possível é criar uma lista de valores permitidos e usar zod.enum() ou zod.union(). Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Por exemplo:
const methodSchema = zod.union([
zod.literal('get'),
zod.literal('GET'),
zod.literal('delete'),
zod.literal('DELETE'),
// acrescentar outros métodos conforme necessário
]).
Ou, de forma mais direta, usar zod.enum() se preferir uma lista fixa. Essa estratégia ajuda a garantir que o parâmetro enviado na requisição seja um método válido, reduzindo erros na integração. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
A questão que fica é: você já precisou fazer validações assim em outros tipos do Axios ou em APIs específicas? Como vocês lidam com essa validação de runtime e tipagem no dia a dia? Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Vamos trocar umas ideias sobre melhores práticas de validação de tipos em TypeScript para APIs.
Sim, essa abordagem é prática. Mas às vezes no meu projeto, a gente acaba usando uma lista de métodos permitidos e valida com includes mesmo. Acho que fica mais fácil de manter quando a lista cresce.
ai sim eu levaria para um piloto bem limitado. Se typescript não melhorar sem piorar observabilidade, melhor parar cedo.
Boa, eu faria assim também, usando union de literals. Assim fica bem claro e evita erro na hora de passar o método. Já passei por isso e foi um saco depois de deploy.
Concordo, mas cuidado ao usar union se a lista for grande.
Isso me faz pensar na questão do runtime x compile time. Validar com enum ou union ajuda na hora de validar na API, mas o TypeScript já garante o tipo na compilação. Como vocês equilibram essas duas etapas?