Contáctanos
Webflow Premium Partner Ehab Fayez
Volver a Agent Skills
Seguridad y Calidad

Zod Input Validation

Define y valida esquemas de datos con Zod para validación de entradas con seguridad de tipos en aplicaciones TypeScript.

Claude Code Cursor Copilot Windsurf Gemini CLI Codex

Descripción General

Zod es una biblioteca de validación de esquemas TypeScript-first que permite definir esquemas e inferir automáticamente tipos TypeScript de ellos. Elimina la necesidad de escribir tipos y lógica de validación por separado, proporcionando una única fuente de verdad para las formas de datos. Los esquemas Zod son componibles, permitiendo construir validaciones complejas desde bloques simples.

La biblioteca soporta todos los primitivos JavaScript más tipos complejos como objetos, arrays, unions, intersecciones, tuplas, records, maps y sets. Proporciona validadores integrados para patrones comunes como email, URL, UUID, CUID, regex y rangos numéricos. Las funciones de transformación permiten coerción y modificación de datos durante el parsing, mientras que los refinements permiten agregar lógica de validación personalizada.

Zod se integra con frameworks y bibliotecas populares incluyendo React Hook Form, tRPC, Astro, Next.js y Hono. Para validación de entradas API, los esquemas Zod pueden validar cuerpos de solicitud, parámetros de query y parámetros de ruta, retornando mensajes de error detallados con la ruta exacta a los campos inválidos. El método .safeParse() proporciona validación sin lanzar excepciones, retornando una unión discriminada de resultados de éxito o error.

¿Para Quién Es?

  • Validar cuerpos de solicitud API con mensajes de error detallados
  • Definir esquemas de formulario con integración React Hook Form
  • Parsear y transformar variables de entorno al inicio
  • Crear esquemas de validación reutilizables para modelos de datos compartidos

Instalación

Configurar Claude Code
npm install zod

Configuración

import { z } from "zod"

const UserSchema = z.object({
  name: z.string().min(2).max(100),
  email: z.string().email(),
  age: z.number().int().positive().optional(),
  role: z.enum(["admin", "user", "moderator"]),
})

type User = z.infer<typeof UserSchema>

const result = UserSchema.safeParse(requestBody)
if (!result.success) {
  return res.status(400).json({ errors: result.error.issues })
}