Validación de datos en TypeScript: bibliotecas, enfoques y ejemplos de código

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

Validación de datos en TypeScript: de la teoría a la práctica



Uno de los problemas clave al desarrollar con TypeScript es la brecha entre la tipificación estática y los datos reales que provienen de fuentes externas (API, formularios, localStorage). TypeScript verifica los tipos en tiempo de compilación, pero en tiempo de ejecución los tipos desaparecen. La validación de datos es el proceso de verificar que los datos cumplan con reglas específicas en tiempo de ejecución, lo cual es fundamental para la fiabilidad de las aplicaciones.



En este artículo, analizaremos las bibliotecas más populares para la validación de datos en TypeScript: Zod, Yup, Joi y class-validator. Revisaremos sus características, ejemplos de uso y te ayudaremos a elegir la herramienta adecuada para tu proyecto.



¿Por qué no es suficiente solo TypeScript?



TypeScript es una herramienta para el desarrollador. Ayuda a escribir código más seguro, pero no protege contra:

  • Datos incorrectos de una API (el campo age podría llegar como una cadena "25")
  • Campos obligatorios faltantes
  • Formatos incorrectos (email, URL, teléfono)
  • Valores fuera de los rangos permitidos


La validación de datos en tiempo de ejecución resuelve estos problemas, verificando los datos contra un esquema y proporcionando errores claros.



Zod — el estándar moderno



Zod es la biblioteca más popular para validación en TypeScript. Su principal ventaja es la estrecha integración con el sistema de tipos: se puede inferir un tipo automáticamente a partir del esquema.



Instalación

npm install zod


Ejemplo de uso

import { z } from 'zod';

// Definimos el 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']),});

// Inferimos el tipo a partir del esquematype User = z.infer<typeof UserSchema>;

// Validaciónconst result = UserSchema.safeParse({ id: 1, email: 'user@example.com', age: 25, role: 'admin',});

if (result.success) { // result.data — datos correctos con tipo User console.log(result.data.email);} else { // result.error — información detallada sobre los errores console.log(result.error.format());}


Características clave de Zod:

  • Inferencia automática de tipos mediante z.infer
  • Transformación de datos (por ejemplo, convertir cadenas a números)
  • Validación de objetos y arrays anidados
  • Soporte para union, intersection, discriminated unions
  • Refinement — validaciones personalizadas


Yup — probado por el tiempo



Yup es una biblioteca de los autores de Formik. Ideal para la validación de formularios en React. Yup tiene una sintaxis más declarativa y un ecosistema rico.



Ejemplo

import * as yup from 'yup';

const schema = yup.object().shape({ name: yup.string().required('El nombre es obligatorio'), email: yup.string().email('Email inválido').required(), age: yup.number().positive().integer().min(18, 'La edad debe ser al menos 18'), tags: yup.array().of(yup.string()).min(1, 'Selecciona al menos una etiqueta'),});

schema.validate({ name: 'Iván', email: 'ivan@example.com', age: 25, tags: ['typescript'],}).then(validData => { console.log('Datos correctos:', validData);}).catch(err => { console.log('Error:', err.errors);});


Características de Yup:

  • Localización de mensajes de error
  • Validación bajo demanda (lazy validation)
  • Transformación de valores (cast)
  • Integración con Formik de serie


Joi — potente y estricto



Joi es una biblioteca con un enorme conjunto de validadores. Originalmente creada para Node.js (Hapi.js), pero funciona muy bien también con TypeScript.



<

Recommendations