Introducción: ¿qué es Valibot y para qué sirve?
\n\nValibot es una biblioteca moderna, modular y ligera para la validación de datos en TypeScript y JavaScript. A diferencia de gigantes como Zod o Joi, Valibot está diseñado con énfasis en el tamaño mínimo del bundle y tree-shaking (posibilidad de eliminar código no utilizado).
\n\nLa filosofía principal de Valibot es «paga solo por lo que usas». Si solo necesitas verificar que una cadena tenga una longitud mínima, importas únicamente string y minLength, no toda la biblioteca. Esto hace que Valibot sea ideal para proyectos donde el tamaño del bundle final de JavaScript es importante (por ejemplo, aplicaciones móviles o bibliotecas de componentes).
La biblioteca está completamente tipada y ofrece una excelente integración con TypeScript, infiriendo automáticamente los tipos a partir de los esquemas de validación. Valibot admite tanto primitivas simples (cadenas, números, booleanos) como estructuras complejas (objetos, arrays, tipos unión, esquemas recursivos).
\n\nInstalación
\n\nValibot se distribuye a través del gestor de paquetes npm. Para instalarlo, ejecuta el siguiente comando en la terminal de tu proyecto:
\n\nnpm install valibot\n\nSi usas yarn:
\n\nyarn add valibot\n\nPara pnpm:
\n\npnpm add valibot\n\nDespués de la instalación, puedes importar las funciones necesarias en tu archivo TypeScript:
\n\nimport { string, number, object, minLength, maxValue } from 'valibot';\n\nInicio rápido con ejemplo de código
\n\nVamos a crear un esquema de validación simple para un formulario de registro de usuario. Validaremos el nombre, el correo electrónico y la edad.
\n\nimport { object, string, number, email, minLength, maxValue, safeParse } from 'valibot';\n\n// 1. Definimos el esquema\nconst UserSchema = object({\n name: string([minLength(2, 'El nombre debe tener al menos 2 caracteres')]),\n email: string([email('Correo electrónico no válido')]),\n age: number([maxValue(120, 'La edad no puede ser mayor a 120')])\n});\n\n// 2. Datos a validar\nconst inputData = {\n name: 'Ana',\n email: 'ana@ejemplo.com',\n age: 30\n};\n\n// 3. Validamos\nconst result = safeParse(UserSchema, inputData);\n\nif (result.success) {\n console.log('Datos válidos:', result.output);\n // result.output tiene el tipo { name: string; email: string; age: number; }\n} else {\n console.error('Errores de validación:', result.issues);\n // result.issues es un array de objetos con descripción de errores\n}\n\nEn este ejemplo usamos safeParse, un método seguro que no lanza una excepción, sino que devuelve un objeto con el campo success. Si la validación es exitosa, en result.output estarán los datos validados con los tipos correctos.
Métodos y funciones principales
\n\nValibot proporciona muchas funciones para crear esquemas. Veamos las más importantes.
\n\n1. string()
\nQué hace: Crea un esquema para validar valores de tipo cadena. Acepta un array opcional de validadores para comprobaciones adicionales (longitud, patrón, etc.).
\nParámetros:
\n- \n
validations(opcional): array de funciones validadoras comominLength,maxLength,email,url,regexy otras. \n
Ejemplo:
\nimport { string, minLength, maxLength, email } from 'valibot';\n\nconst UsernameSchema = string([minLength(3), maxLength(20)]);\nconst EmailSchema = string([email()]);\n\nconsole.log(safeParse(UsernameSchema, 'Jo')); // { success: false, issues: [...] }\nconsole.log(safeParse(EmailSchema, 'test@test.com')); // { success: true, output: 'test@test.com' }\n\n2. number()
\nQué hace: Crea un esquema para validar valores numéricos. Soporta va
También en la biblioteca
tsyringe TypeScript: guía completa con ejemplos prácticos
Bibliotecas WebSocket de Rust: Tokio-tungstenite y async-tungstenite para tiempo real
Spring WebFlux Java: guía completa con ejemplos prácticos
Limitación de Tasa en TypeScript: bibliotecas, estrategias y ejemplos