TypeStack/class-validator para TypeScript: guia completo com exemplos
1. O que é e para que serve
A biblioteca TypeStack/class-validator é uma ferramenta poderosa para validação de dados em TypeScript e JavaScript, baseada em decorators. Ela permite que desenvolvedores descrevam regras de validação diretamente nas classes, usando decorators de propriedades. Isso torna o código mais legível, autodocumentado e simplifica significativamente o processamento de dados recebidos, especialmente ao trabalhar com REST APIs, formulários ou qualquer outra fonte de dados.
Para que serve? No desenvolvimento web moderno, os dados vêm de várias fontes: requisições HTTP, arquivos de configuração, bancos de dados. Sem uma validação confiável, esses dados podem causar erros em tempo de execução, vulnerabilidades de segurança ou simplesmente um comportamento incorreto da aplicação. O class-validator resolve esse problema fornecendo uma forma declarativa de verificar dados. Em vez de escrever longas estruturas if-else, você simplesmente adiciona decorators às propriedades da classe, e a biblioteca verifica automaticamente se elas atendem às regras definidas.
Outra vantagem importante é a integração estreita com o TypeScript. Os decorators permitem não apenas validar dados, mas também definir seus tipos, tornando o processo de desenvolvimento mais seguro e previsível. A biblioteca oferece uma ampla gama de validadores embutidos (desde verificações simples de comprimento de string até expressões regulares complexas) e permite criar facilmente seus próprios validadores personalizados.
2. Instalação
Para instalar a biblioteca class-validator e sua dependência obrigatória reflect-metadata, execute o seguinte comando no terminal do seu projeto:
npm install class-validator reflect-metadata
Após a instalação, certifique-se de que as seguintes opções estejam habilitadas no seu arquivo tsconfig.json para o funcionamento correto dos decorators:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
Também é importante importar o reflect-metadata no início da sua aplicação (geralmente no arquivo principal index.ts ou app.ts):
import "reflect-metadata";
3. Início rápido
Vamos ver um exemplo mínimo funcional. Criaremos uma classe de usuário com validação de campos:
import "reflect-metadata";
import { validate, IsString, IsEmail, MinLength } from "class-validator";
class User {
@IsString()
@MinLength(3, { message: "O nome deve ter pelo menos 3 caracteres" })
name: string;
@IsEmail({}, { message: "Email inválido" })
email: string;
constructor(name: string, email: string) {
this.name = name;
this.email = email;
}
}
async function main() {
const user = new User("Jo", "email-invalido");
const errors = await validate(user);
if (errors.length > 0) {
console.log("Erros de validação:");
errors.forEach(error => {
console.log(`- ${error.property}: ${Object.values(error.constraints).join(", ")}`);
});
} else {
console.log("Validação bem-sucedida!");
}
}
main();
// Saída:
// Erros de validação:
// - name: O nome deve ter pelo menos 3 caracteres
// - email: Email inválido
Neste exemplo, criamos a classe User, adicionamos decorators às suas propriedades e chamamos a função validate(). Ela retorna um array de erros se os dados não estiverem em conformidade com as regras.
4. Principais métodos/funções/classes
Vamos explorar 8 funções e classes essenciais da biblioteca
Também na biblioteca
Filas de Tarefas em Go (Golang): Melhores Bibliotecas e Ferramentas
Trabalhando com CSV em TypeScript: bibliotecas e exemplos de código
Gerador de QR Codes em Rust: criação e integração em aplicações web
ORM para Rust: comparação e exemplos Diesel, SeaORM, SQLx
CreateML para Swift: guia completo com exemplos práticos