Validação de dados em TypeScript: bibliotecas, abordagens e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Validação de dados em TypeScript: da teoria à prática



Um dos principais problemas no desenvolvimento com TypeScript é a lacuna entre a tipagem estática e os dados reais que vêm de fontes externas (API, formulários, localStorage). O TypeScript verifica os tipos em tempo de compilação, mas em tempo de execução os tipos desaparecem. A validação de dados é o processo de verificar se os dados estão em conformidade com regras específicas em tempo de execução, o que é crucial para a confiabilidade das aplicações.



Neste artigo, exploraremos bibliotecas populares para validação de dados em TypeScript: Zod, Yup, Joi e class-validator. Veremos suas características, exemplos de uso e ajudaremos você a escolher a ferramenta certa para o seu projeto.



Por que apenas o TypeScript não é suficiente?



TypeScript é uma ferramenta para o desenvolvedor. Ela ajuda a escrever código mais seguro, mas não protege contra:

  • Dados incorretos de APIs (o campo age pode vir como string "25")
  • Ausência de campos obrigatórios
  • Formatos incorretos (email, URL, telefone)
  • Valores fora dos intervalos permitidos


A validação de dados em tempo de execução resolve esses problemas, verificando os dados em relação a um esquema e fornecendo erros claros.



Zod — o padrão moderno



Zod é a biblioteca mais popular para validação em TypeScript. Sua principal vantagem é a integração estreita com o sistema de tipos: é possível inferir o tipo automaticamente a partir do esquema.



Instalação

npm install zod


Exemplo de uso

import { z } from 'zod';

// Definindo o esquemaconst UserSchema = z.object({ id: z.number().positive(), email: z.string().email(), age: z.number().min(18).max(120).optional(), role: z.enum(['admin', 'user', 'guest']),});

// Inferindo o tipo a partir do esquematype User = z.infer<typeof UserSchema>;

// Validaçãoconst result = UserSchema.safeParse({ id: 1, email: 'user@example.com', age: 25, role: 'admin',});

if (result.success) { // result.data — dados válidos com o tipo User console.log(result.data.email);} else { // result.error — informações detalhadas sobre os erros console.log(result.error.format());}


Principais recursos do Zod:

  • Inferência automática de tipos via z.infer
  • Transformação de dados (por exemplo, converter strings em números)
  • Validação de objetos aninhados e arrays
  • Suporte a union, intersection, discriminated unions
  • Refinement — verificações personalizadas


Yup — testado pelo tempo



Yup é uma biblioteca dos autores do Formik. Ideal para validação de formulários em React. O Yup possui uma sintaxe mais declarativa e um ecossistema rico.



Exemplo

import * as yup from 'yup';

const schema = yup.object().shape({ name: yup.string().required('Nome é obrigatório'), email: yup.string().email('Email inválido').required(), age: yup.number().positive().integer().min(18, 'A idade deve ser no mínimo 18'), tags: yup.array().of(yup.string()).min(1, 'Selecione pelo menos uma tag'),});

schema.validate({ name: 'João', email: 'joao@example.com', age: 25, tags: ['typescript'],}).then(validData => { console.log('Dados válidos:', validData);}).catch(err => { console.log('Erro:', err.errors);});


Características do Yup:

  • Localização de mensagens de erro
  • Validação sob demanda (lazy validation)
  • Transformação de valores (cast)
  • Integração com Formik nativa


Joi — poderoso e rigoroso



Joi é uma biblioteca com um vasto conjunto de validadores. Originalmente criada para Node.js (Hapi.js), mas funciona muito bem com TypeScript também.



<

Recommendations