1. O Que E Zod
Zod e uma biblioteca TypeScript-first de declaracao e validacao de schemas. Criada por Colin McDonnell, e amplamente adotada no ecossistema JavaScript moderno — especialmente em projetos com Next.js, tRPC, React Hook Form e frameworks de backend como Fastify e Hono.
Diferente dos tipos TypeScript (que existem apenas em tempo de compilacao), os schemas Zod existem em tempo de execucao. Isso significa que voce pode validar dados externos — como respostas de APIs, inputs de formularios ou payloads de webhooks — e ter garantia de que os dados estao no formato esperado antes de processar.
2. Por Que Usar Zod em Vez de Tipos TypeScript Puro
Tipos TypeScript sao apagados na compilacao. Ao receber dados de uma API externa, o TypeScript nao pode garantir que o formato seja o declarado — ele simplesmente confia no que voce tipou. O Zod valida em runtime e lanca erros descritivos quando os dados nao correspondem ao schema.
- Inferencia automatica de tipo TypeScript a partir do schema (
z.infer<typeof Schema>) - Mensagens de erro detalhadas e localizaveis
- Transformacoes e coercao de tipos embutidas
- Composicao e reutilizacao de schemas
3. Principais Tipos e Metodos Zod
Os tipos primitivos mais usados incluem z.string(), z.number(), z.boolean(), z.null() e z.undefined(). Para colecoes, z.array() e z.object() permitem schemas aninhados de qualquer profundidade.
Metodos modificadores comuns: .optional() torna o campo opcional (pode ser undefined), .nullable() permite null, .default() define um valor padrao, e .transform() aplica uma funcao de transformacao ao valor validado.
4. Casos de Uso Praticos
- Validacao de resposta de API: garantir que o payload retornado corresponde ao tipo esperado antes de usar no componente.
- Validacao de formularios: integrar com React Hook Form ou outras bibliotecas de formulario para validacao em tempo real.
- Variaves de ambiente: validar
process.envna inicializacao da aplicacao. - Schemas de rotas: em tRPC e Fastify, definir contratos de entrada e saida para endpoints.
5. Limitacoes do Gerador Automatico
O gerador desta ferramenta analisa a estrutura de um JSON de exemplo e infere os tipos. Ha limitacoes importantes a considerar:
- O tipo inferido e baseado no valor de exemplo — uma string pode ser email em um caso e nao em outro.
- Arrays vazios resultam em
z.array(z.unknown())pois o tipo dos itens nao pode ser inferido. - Union types (
z.union()) nao sao detectados automaticamente — valores que podem ser de tipos diferentes precisam ser ajustados manualmente. - O schema gerado e um ponto de partida — sempre revise e ajuste de acordo com a documentacao real da API.
6. Perguntas Frequentes
O schema gerado e pronto para producao?
E um excelente ponto de partida, mas deve ser revisado. O gerador infere tipos pelos valores de exemplo, o que pode nao refletir todos os casos possíveis da API real. Adicione validacoes extras conforme necessario.
Como usar o schema gerado no meu projeto?
Copie o codigo gerado, cole em um arquivo TypeScript do seu projeto (ex: schema.ts), e importe o Zod com import { z } from 'zod'. Voce precisara instalar o pacote: npm install zod.
Como tratar campos que podem ser null ou string?
Use z.string().nullable() para campos que podem ser string ou null, ou z.union([z.string(), z.null()]) para ser explicito. O gerador aplica .nullable() automaticamente em campos cujo valor no JSON e null.