¿Qué es Zod?
Zod es una biblioteca para la validación declarativa y el análisis de datos, escrita en TypeScript. Permite describir esquemas de datos (los esquemas son descripciones estrictas de tipos) y verificar que cualquier objeto, cadena, número, etc., cumpla con ellos. La característica principal de Zod es su integración completa con TypeScript: los tipos se infieren automáticamente a partir del esquema, lo que elimina la duplicación de definiciones.
¿Por qué es necesaria la validación de datos?
En aplicaciones reales, los datos a menudo provienen de fuentes externas (API, formularios, archivos de configuración, localStorage). Sin validación, es fácil introducir errores, ataques XSS o comportamientos inesperados. Zod garantiza que los datos coincidan con la estructura esperada y lanza errores claros si algo no está bien.
Instalación
npm install zodLa biblioteca no requiere configuración adicional y funciona tanto en Node.js como en el navegador (con un bundler).
Funciones principales
- Creación de esquemas:
z.string(),z.number(),z.object(),z.array(), etc. - Análisis y validación: el método
.parse()devuelve los datos o lanza un error;.safeParse()devuelve un objeto con los campos success/data/error. - Transformación:
.transform()permite modificar los datos después de una verificación exitosa. - Refine: verificaciones personalizadas con
.refine(). - Inferencia de tipos:
z.infer<typeof schema>genera un tipo TypeScript.
Ejemplo de código en TypeScript
import { z } from 'zod';
// Definimos un esquema para un usuarioconst UserSchema = z.object({ id: z.number().int().positive(), name: z.string().min(2).max(50), email: z.string().email(), age: z.number().min(18).max(120).optional(), role: z.enum(['admin', 'user', 'guest'])});
// Inferimos el tipo basado en el esquematype User = z.infer<typeof UserSchema>;
// Usamos safeParse para una validación seguraconst rawData = { id: 1, name: 'Ana', email: 'anna@example.com', age: 25, role: 'admin'};
const result = UserSchema.safeParse(rawData);if (result.success) { console.log('Datos válidos:', result.data);} else { console.error('Errores:', result.error.errors);}Cuándo usar Zod
Zod es ideal para:
- Validar datos de entrada de API (por ejemplo, en Express o Next.js).
- Verificar datos de formularios tanto en el cliente como en el servidor.
- Analizar variables de entorno (
dotenv+ Zod). - Trabajar con archivos de configuración (JSON/YAML).
- Crear tipos estrictos para datos dinámicos.
Gracias a su soporte completo de TypeScript, Zod hace que el código sea más seguro y legible, eliminando la desincronización entre los tipos y los datos reales.