Introducción a Zod: qué es y por qué es necesario
\n\nEn el desarrollo web moderno con TypeScript, uno de los problemas clave es garantizar la integridad de los datos. Incluso con una tipificación estricta, TypeScript no puede garantizar que los datos provenientes de fuentes externas (API, formularios, localStorage, WebSocket) realmente correspondan a los tipos declarados. El compilador de TypeScript funciona en la etapa de desarrollo, pero durante la ejecución del programa los tipos se borran. Aquí es donde Zod viene al rescate.
\n\nZod es una biblioteca para la validación declarativa y tipificación de datos para TypeScript y JavaScript. Permite crear esquemas (schemas) que sirven tanto como validador de datos en tiempo de ejecución como fuente de verdad para los tipos estáticos de TypeScript. La filosofía principal de Zod es "un esquema, dos propósitos": escribes el esquema una vez y obtienes tanto la validación como el tipo inferido automáticamente.
\n\nVentajas clave de Zod:
\n- \n
- Seguridad de tipos: inferencia automática de tipos TypeScript a partir de esquemas. \n
- Declaratividad: sintaxis legible y concisa. \n
- Composicionalidad: los esquemas se pueden combinar y extender. \n
- Errores detallados: mensajes de error de validación claros. \n
- Cero dependencias: la biblioteca no requiere paquetes adicionales. \n
Instalación de Zod
\n\nZod es un paquete npm, por lo que la instalación se realiza a través del gestor de paquetes de Node.js. La biblioteca está escrita en TypeScript y viene con archivos de declaración de tipos listos, por lo que no se requiere una instalación adicional de @types/zod.
\n\n# Instalación con npm\nnpm install zod\n\n# Instalación con yarn\nyarn add zod\n\n# Instalación con pnpm\npnpm add zod\n\nDespués de la instalación, puedes importar Zod en tu proyecto:
\n\nimport { z } from "zod";\n\nTen en cuenta: Zod no se instala con pip, ya que es una biblioteca para el ecosistema JavaScript/TypeScript, no para Python.
\n\nInicio rápido con un ejemplo de código
\n\nVamos a crear un esquema simple para validar datos de usuario y ver inmediatamente cómo Zod combina validación y tipificación.
\n\nimport { z } from "zod";\n\n// 1. Definimos el esquema\nconst UserSchema = z.object({\n id: z.number().positive(),\n name: z.string().min(2, "El nombre debe contener al menos 2 caracteres"),\n email: z.string().email("Email no válido"),\n age: z.number().int().min(18, "La edad debe ser al menos 18 años").optional(),\n});\n\n// 2. Inferimos automáticamente el tipo a partir del esquema\ntype User = z.infer<typeof UserSchema>;\n\n// 3. Validamos los datos\nconst validData = {\n id: 1,\n name: "Ana",\n email: "ana@example.com",\n age: 25,\n};\n\nconst result = UserSchema.safeParse(validData);\n\nif (result.success) {\n // result.data tiene el tipo User\n console.log("Validación exitosa:", result.data);\n} else {\n // result.error contiene información detallada sobre los errores\n console.log("Errores de validación:", result.error.errors);\n}\n\n// Ejemplo con datos no válidos\nconst invalidData = {\n id: -1,\n name: "A",\n email: "no-email",\n};\n\nconst invalidResult = UserSchema.safeParse(invalidData);\nif (!invalidResult.success) {\n console.log("Errores:", invalidResult.error.errors);\n // Mostrará:\n // - id: debe ser un número positivo\n // - name: El nombre debe contener al menos 2 caracteres\n // - email: Email no válido\n}\n\nMétodos y funciones principales de Zod
\n\nEn esta sección, veremos en detalle los 10 métodos clave de Zod que cubrirán el 90% de tus tareas de validación.
\n\n1. z.string() — Validación de cadenas
\nQué hace: Crea un esquema para validar valores de cadena. Proporciona una cadena de métodos para imponer restricciones adicionales.
\nParámetros: No acepta parámetros al crearse
También en la biblioteca
Configuración de aplicaciones PHP: bibliotecas y enfoques
Geolocalización y mapas en PHP: bibliotecas, API y ejemplos de código
ORM para JavaScript (Node.js): comparación de Sequelize, TypeORM, Prisma