class-validator para TypeScript: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a class-validator

\n\n

class-validator es una biblioteca potente y popular para la validación de datos en TypeScript y JavaScript, construida sobre la base de decoradores. Permite describir de forma declarativa las reglas de validación directamente dentro de las clases, utilizando anotaciones. Esto hace que el código sea limpio, legible y fácil de mantener.

\n\n

La biblioteca es especialmente útil al desarrollar aplicaciones de servidor (por ejemplo, en NestJS o Express), donde es necesario verificar solicitudes entrantes, datos de formularios, configuraciones y cualquier otra estructura de datos. En lugar de escribir largas cadenas de if-else, simplemente agrega decoradores a las propiedades de la clase.

\n\n

¿Para qué sirve class-validator?

\n\n
    \n
  • Declaratividad: Las reglas de validación se definen junto a los datos, lo que mejora la legibilidad.
  • \n
  • Conjunto potente de validadores: Incluye decenas de decoradores integrados para verificar cadenas, números, fechas, arreglos, objetos anidados y mucho más.
  • \n
  • Validadores personalizados: Permite crear fácilmente sus propias reglas.
  • \n
  • Integración con TypeScript: Soporte completo para tipos y decoradores.
  • \n
  • Validación asíncrona: Soporta verificaciones que requieren operaciones asíncronas (por ejemplo, verificar unicidad en la base de datos).
  • \n
\n\n

Instalación

\n\n

Para usar class-validator necesitará Node.js y npm/yarn. Instale la biblioteca y las dependencias necesarias:

\n\n
npm install class-validator class-transformer reflect-metadata
\n\n

O a través de yarn:

\n\n
yarn add class-validator class-transformer reflect-metadata
\n\n

Importante: La biblioteca reflect-metadata es obligatoria para el funcionamiento de los decoradores. Asegúrese de que esté importada en su archivo principal (por ejemplo, index.ts o main.ts):

\n\n
import 'reflect-metadata';
\n\n

También asegúrese de que en su tsconfig.json estén incluidas las siguientes configuraciones:

\n\n
{\n  "compilerOptions": {\n    "experimentalDecorators": true,\n    "emitDecoratorMetadata": true\n  }\n}
\n\n

Inicio rápido

\n\n

Vamos a crear un modelo simple de usuario y validarlo.

\n\n
import 'reflect-metadata';\nimport { validate, IsString, IsEmail, MinLength } from 'class-validator';\nimport { plainToClass } from 'class-transformer';\n\nclass User {\n    @IsString()\n    @MinLength(3, { message: 'El nombre debe contener al menos 3 caracteres' })\n    name: string;\n\n    @IsEmail({}, { message: 'Correo electrónico no válido' })\n    email: string;\n\n    constructor(name: string, email: string) {\n        this.name = name;\n        this.email = email;\n    }\n}\n\nasync function main() {\n    // Creamos un objeto con datos no válidos\n    const userData = { name: 'Jo', email: 'not-an-email' };\n    \n    // Convertimos el objeto simple en una instancia de la clase\n    const user = plainToClass(User, userData);\n    \n    // Validamos\n    const errors = await validate(user);\n    \n    if (errors.length > 0) {\n        console.log('Errores de validación:', errors);\n        errors.forEach(error => {\n            console.log(`Campo: ${error.property}`);\n            for (const constraint in error.constraints) {\n                console.log(`  - ${error.constraints[constraint]}`);\n            }\n        });\n    } else {\n        console.log('¡Validación exitosa!');\n    }\n}\n\nmain();\n// Salida:\n// Errores de validación: [...]\n// Campo: name\n//   - El nombre debe contener al menos 3 caracteres\n// Campo: email\n//   - Correo electrónico no válido
\n\n

Métodos y decoradores principales

\n\n

1. @IsString()

\n

Qué hace: Verifica si el valor es una cadena de texto.

\n

Parámetros: Acepta un objeto opcional con opciones de validación (por ejemplo, { message: '...' }).

\n<

Recommendations