es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

JOI – La clave de objeto creada no está permitida en base al valor de otra clave.

Tengo un objeto así:

type A = {
  type: 'user' | 'technical',
  name: string,
  vat?: string
};

Utilizo joi para validar la petición del usuario. Me gustaría una validación en la que si el campo type es technical, entonces el campo vat es required(), de lo contrario, el campo se convierte en un campo no permitido.

Por ahora, esta es mi validación donde si el campo type es user, el campo se convierte en opcional:

type: Joi.valid('user', 'technical').required(),
name: Joi.string().min(2).max(30).required(),
vat: Joi.string().regex(new RegExp(REGEX_CONSTANTS.VAT_NUMBER)).when('type', { is: 'user', then: Joi.optional() }).required()
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar la validación de que si el type es technical, entonces el vat es required() y de lo contrario es un campo not allowed, puede modificar la validación para el campo vat utilizando el método forbidden() cuando el type es technical. Aquí está la validación actualizada:

    type: Joi.valid('user', 'technical').required(),
    name: Joi.string().min(2).max(30).required(),
    vat: Joi.when('type', {
      is: 'technical',
      then: Joi.string().regex(new RegExp(REGEX_CONSTANTS.VAT_NUMBER)).required(),
      otherwise: Joi.forbidden()
    })
    

    En esta validación, se utiliza el método when() para verificar el valor de type. Si es technical, el campo vat se establece como required() utilizando la opción then. Si es cualquier otra cosa, el campo vat se establece como forbidden() utilizando la opción otherwise. Esto asegura que el campo vat solo sea necesario cuando el type es technical y no está permitido en caso contrario.

Comments are closed.