¿Buscas una forma simple y eficiente de validar tus datos en TypeScript? Descubre Zod, la biblioteca que revolucionará tu forma de manejar la validación de datos. ¡En solo 2 minutos, entenderás por qué Zod se ha vuelto imprescindible!
¿Por qué Zod? 🎯
Zod es una biblioteca de validación que se destaca por:
- Una sintaxis intuitiva y concisa
- Una integración perfecta con TypeScript
- Una inferencia automática de tipos
- Mensajes de error claros y personalizables
Instalación rápida ⚙️
bash
1npm install zod
2# o
3yarn add zod
Los fundamentos de Zod en 30 segundos 🚀
typescript
1import { z } from 'zod';
2
3// Definición de un esquema simple
4const userSchema = z.object({
5 nombre: z.string().min(2, 'El nombre debe contener al menos 2 caracteres'),
6 edad: z.number().min(18, 'El usuario debe ser mayor de edad'),
7 email: z.string().email('Formato de email inválido'),
8});
9
10// ¡Tipo inferido automáticamente!
11type User = z.infer<typeof userSchema>;
12
13// Validación de datos
14const validateUser = (data: unknown) => {
15 const result = userSchema.safeParse(data);
16 return result.success ? result.data : result.error.issues;
17};
Características avanzadas 💪
Validación condicional
typescript
1const formularioSchema = z
2 .object({
3 tipo: z.enum(['particular', 'empresa']),
4 cif: z.string().optional(),
5 })
6 .refine((data) => !(data.tipo === 'empresa' && !data.cif), {
7 message: 'El CIF es obligatorio para una empresa',
8 });
Transformaciones automáticas
typescript
1const dateSchema = z.string().transform((str) => new Date(str));
2const numberSchema = z.string().transform(Number);
Buenas prácticas 🎓
- Preferir
safeParse
en lugar de parse
para un manejo de errores más elegante:
typescript
1const result = userSchema.safeParse(data);
2if (!result.success) {
3 console.log(result.error.issues);
4 return;
5}
6// Usar result.data de forma segura
- Reutilizar los esquemas para una mejor mantenibilidad:
typescript
1const direccionSchema = z.object({
2 calle: z.string(),
3 ciudad: z.string(),
4 codigoPostal: z.string().regex(/^\d{5}$/),
5});
6
7const userSchema = z.object({
8 // ...otros campos
9 direccion: direccionSchema,
10});
Casos de uso comunes 📋
Validación de API
typescript
1const apiResponseSchema = z.object({
2 status: z.number(),
3 data: z.array(userSchema),
4 metadata: z.record(z.string()),
5});
6
7async function fetchUsers() {
8 const response = await fetch('/api/users');
9 const data = await response.json();
10
11 const result = apiResponseSchema.safeParse(data);
12 if (!result.success) {
13 throw new Error('Respuesta API inválida');
14 }
15
16 return result.data;
17}
Validación de formulario
typescript
1const loginSchema = z.object({
2 email: z.string().email(),
3 password: z.string().min(8),
4});
5
6function handleSubmit(formData: unknown) {
7 const result = loginSchema.safeParse(formData);
8 if (!result.success) {
9 // Mostrar errores
10 return;
11 }
12 // Procesar los datos validados
13}
Para ir más allá 🎈
En resumen ✨
Zod simplifica considerablemente la validación de datos en TypeScript mientras garantiza la seguridad de los tipos. Su sintaxis intuitiva y su flexibilidad lo convierten en una herramienta valiosa para cualquier desarrollador TypeScript.
¡No dudes en consultar la documentación oficial para profundizar en tus conocimientos de Zod!