Tipo de Validación
- zod:
zodes una biblioteca de validación de esquemas que se centra en la validación de datos con un enfoque en la inferencia de tipos de TypeScript. Soporta validación sincrónica y asíncrona, lo que lo hace adecuado para aplicaciones modernas que utilizan TypeScript. - joi:
joies una biblioteca de validación de esquemas que permite la validación de datos estructurados utilizando un enfoque basado en esquemas. Soporta validación sincrónica y asíncrona, lo que lo hace adecuado para validar datos de formularios, API y más. - yup:
yupes una biblioteca de validación de esquemas que permite la validación de datos anidados y estructurados. Soporta validación sincrónica y asíncrona, lo que lo hace ideal para formularios y aplicaciones que requieren validación dinámica. - class-validator:
class-validatorse centra en la validación de propiedades de clase utilizando decoradores. Soporta validación sincrónica y asíncrona, lo que permite manejar casos como la validación de correos electrónicos y contraseñas de manera efectiva. - class-transformer-validator:
class-transformer-validatorpermite la validación de datos y la transformación de objetos de clase utilizando decoradores. Soporta validación sincrónica y asíncrona, lo que lo hace versátil para diferentes escenarios.
Integración con TypeScript
- zod:
zodestá diseñado pensando en TypeScript, proporcionando una inferencia de tipos precisa y completa a partir de los esquemas de validación, lo que lo convierte en una excelente opción para aplicaciones TypeScript. - joi:
joiproporciona soporte limitado para TypeScript, pero su enfoque basado en esquemas puede hacer que la inferencia de tipos sea menos intuitiva en comparación con bibliotecas que utilizan decoradores. - yup:
yupofrece un buen soporte para TypeScript, especialmente para la validación de esquemas, lo que permite una inferencia de tipos razonable al definir esquemas de validación. - class-validator:
class-validatorestá diseñado para funcionar bien con TypeScript, utilizando decoradores para definir reglas de validación en propiedades de clase, lo que permite una validación tipada. - class-transformer-validator:
class-transformer-validatorofrece una excelente integración con TypeScript, aprovechando decoradores y tipos para proporcionar validación y transformación de datos de manera tipada.
Personalización de Mensajes de Error
- zod:
zodpermite la personalización de mensajes de error, aunque de manera más limitada en comparación con otras bibliotecas. Los desarrolladores pueden definir mensajes de error personalizados al crear esquemas de validación. - joi:
joiofrece una API rica para personalizar mensajes de error, permitiendo a los desarrolladores definir mensajes de error personalizados para reglas de validación específicas, lo que mejora la claridad y la usabilidad. - yup:
yuppermite la personalización de mensajes de error de manera sencilla, lo que facilita la creación de mensajes de error claros y personalizados para diferentes reglas de validación. - class-validator:
class-validatorpermite la personalización de mensajes de error utilizando opciones en los decoradores, lo que permite a los desarrolladores definir mensajes de error específicos para cada regla de validación. - class-transformer-validator:
class-transformer-validatorpermite la personalización de mensajes de error a través de decoradores y opciones de configuración, lo que facilita la creación de mensajes de error claros y significativos.
Ejemplo de Código
- zod:
Ejemplo de
zodconst { z } = require('zod'); const schema = z.object({ email: z.string().email(), age: z.number().int().nonnegative(), }); const data = { email: 'invalid-email', age: '25', }; try { const validatedData = schema.parse(data); console.log('Datos validados:', validatedData); } catch (error) { console.log('Errores de validación:', error.errors); } - joi:
Ejemplo de
joiconst Joi = require('joi'); const schema = Joi.object({ email: Joi.string().email().required(), age: Joi.number().integer().min(0).required(), }); const data = { email: 'invalid-email', age: '25', }; const { error, value } = schema.validate(data); if (error) { console.log('Errores de validación:', error.details); } else { console.log('Datos validados:', value); } - yup:
Ejemplo de
yupconst *yup* = require('yup'); const schema = yup.object().shape({ email: yup.string().email().required(), age: yup.number().integer().min(0).required(), }); const data = { email: 'invalid-email', age: '25', }; schema.validate(data, { abortEarly: false }) .then((value) => { console.log('Datos validados:', value); }) .catch((err) => { console.log('Errores de validación:', err.errors); }); - class-validator:
Ejemplo de
class-validatorimport { IsEmail, IsInt, validate } from 'class-validator'; import { Transform, Type } from 'class-transformer'; class User { @IsEmail() email: string; @IsInt() @Transform(({ value }) => parseInt(value, 10)) @Type(() => Number) age: number; } const user = new User(); user.email = 'invalid-email'; user.age = '25'; validate(user) .then((errors) => { if (errors.length > 0) { console.log('Errores de validación:', errors); } else { console.log('Usuario validado:', user); } }); - class-transformer-validator:
Ejemplo de
class-transformer-validatorimport { IsEmail, validate } from 'class-validator'; import { Transform, Type } from 'class-transformer'; import { validateAndTransform } from 'class-transformer-validator'; class User { @IsEmail() email: string; @Transform(({ value }) => parseInt(value, 10)) @Type(() => Number) age: number; } const user = new User(); user.email = 'invalid-email'; user.age = '25'; validateAndTransform(user) .then((errors) => { if (errors.length > 0) { console.log('Errores de validación:', errors); } else { console.log('Usuario validado y transformado:', user); } });
