Back

Como Validar Dados em TypeScript Usando Zod (Com Exemplos)

Como Validar Dados em TypeScript Usando Zod (Com Exemplos)

Validar dados em tempo de execução é um desafio comum para desenvolvedores TypeScript. Embora o TypeScript detecte erros durante a compilação, ele não garante a segurança de tipos quando seu código está em execução. Isso significa que dados externos, como respostas de API ou entradas do usuário, podem causar erros inesperados em tempo de execução. Zod é uma biblioteca de validação de esquemas focada em TypeScript que resolve esse problema validando dados contra esquemas definidos em tempo de execução.

Neste artigo, você aprenderá como usar o Zod de forma eficaz, desde o uso básico até técnicas avançadas de validação, comparações com outras bibliotecas e melhores práticas para integrá-lo em suas aplicações.

Principais Conclusões

  • Zod valida dados em tempo de execução de forma eficiente com definições de esquema.
  • A inferência automática de tipos reduz a duplicação manual de tipos.
  • Ideal para respostas de API, validação de formulários e variáveis de ambiente.
  • Oferece tratamento de erros claro e feedback detalhado.

Por que Usar Zod para Validação em TypeScript?

Métodos tradicionais de validação exigem código boilerplate extenso com verificações manuais. Os tipos do TypeScript desaparecem em tempo de execução, deixando potenciais problemas não verificados. O Zod resolve esses problemas ao:

  • Fornecer definições de esquema declarativas
  • Oferecer validação automática em tempo de execução
  • Inferir tipos TypeScript diretamente dos esquemas

O Zod reduz significativamente o código boilerplate, garantindo que seus dados sejam validados consistentemente em toda a sua aplicação.

Começando com Zod

Instale o Zod via npm:

npm install zod

Aqui está um exemplo simples:

import { z } from 'zod';

const nameSchema = z.string();

nameSchema.parse('Alice'); // retorna 'Alice'
nameSchema.parse(42); // lança ZodError

Você pode validar de forma semelhante números, booleanos e aplicar restrições como comprimentos ou valores mínimos ou máximos.

Técnicas Avançadas de Validação com Zod

Validando Estruturas Complexas

O Zod pode validar objetos aninhados e arrays sem esforço:

const userSchema = z.object({
  name: z.string(),
  age: z.number().min(0),
  email: z.string().email().optional()
});

Valores Opcionais e Nulos

Use .optional() para campos opcionais e .nullable() para campos que podem explicitamente aceitar valores nulos.

Mensagens de Erro Personalizadas

Melhore a clareza especificando mensagens de erro personalizadas:

z.string().min(5, "Nome muito curto");

Uniões e Interseções

Combine esquemas para cenários complexos:

const schema = z.union([z.string(), z.number()]);

Comparando Zod com Outras Bibliotecas de Validação

O Zod oferece exclusivamente inferência de TypeScript integrada em comparação com bibliotecas como Yup e Joi, tornando-o ideal para fluxos de trabalho centrados em TypeScript. Diferentemente do Yup e Joi, o Zod reduz a duplicação entre definições de esquema e tipo.

Usando Zod em Aplicações do Mundo Real

Validação de Respostas de API

Valide dados recebidos de forma confiável:

const responseSchema = z.object({ data: z.array(z.string()) });
const result = responseSchema.safeParse(apiResponse);

Validação de Formulários React

Use o Zod com bibliotecas como React Hook Form para manipulação e validação de formulários sem problemas.

Verificações de Variáveis de Ambiente

Proteja a configuração do seu aplicativo:

const envSchema = z.object({ API_URL: z.string().url(), PORT: z.number() });
envSchema.parse(process.env);

Erros Comuns e Melhores Práticas

  • Evite Complicar Demais os Esquemas: Mantenha os esquemas modulares e reutilizáveis.
  • Escolha .safeParse vs. .parse com Sabedoria: Use .parse quando preferir exceções, .safeParse quando lidar com erros explicitamente.
  • Trate os Erros de Validação Adequadamente: Sempre utilize as mensagens de erro detalhadas que o Zod fornece.

Conclusão

O Zod preenche a lacuna entre a validação em tempo de compilação e em tempo de execução do TypeScript, garantindo que seus dados sejam precisos e confiáveis. Com o Zod, a lógica de validação torna-se concisa, gerenciável e integrada diretamente ao sistema de tipos do TypeScript, melhorando significativamente a robustez da sua aplicação.

Perguntas Frequentes

Sim, o Zod integra-se perfeitamente com o Express para validar corpos de requisição, parâmetros de consulta e rotas.

O Zod é tipicamente preferido em projetos TypeScript devido à inferência automática de tipos e redução de código boilerplate.

O Zod oferece métodos `.parseAsync()` e `.safeParseAsync()` para lidar facilmente com validações assíncronas.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers