¿Cómo puedo validar el total de dos referencias como se muestra a continuación? Preferiría que la custom esté en el total , pero no estoy seguro de cómo obtener el valor de las refs en la costumbre cuando uso Joi.ref .
Puedo hacer lo siguiente y colgar un custom de todo el esquema de validación, pero preferiría adjuntarlo a total .
No quiero usar expresión ()
Prefiero no cambiar la estructura del esquema según esta respuesta .
const widgetValidator = Joi.object({ a: Joi.number().integer().min(0).required(), b: Joi.number().integer().min(1).required(), total: Joi.number().integer().min(1).required(), }).custom((value: {a: number; b: number; total: number;}, helpers) => { if (value.total !== value.a + value.b) { throw new Error('invalid balance calculation'); } return value; }, );Cuando instala custom en un atributo, será un poco difícil obtener valores de objetos completos. Tienes que obtenerlo de los estados de los ayudantes :
Joi.object({ a: Joi.number().integer().min(0).required(), b: Joi.number().integer().min(1).required(), total: Joi.number().integer().min(1).required().custom((value, helpers) => { const { a, b } = helpers.state.ancestors[0]; if (value !== a + b) { throw new Error('invalid balance calculation'); } return value; }, ) })