Используя Joi, как заставить схему требовать rent.max
только тогда, когда type
либо A
, либо B
И subType
равно либо AA
, либо BB
? Вот моя попытка.
const Joi = require("joi");
const schema = Joi.object().keys({
type: Joi.string().valid('A', 'B', 'C').required(),
subType: Joi.string().valid('AA', 'BB', 'X'),
rent: Joi.object().keys({
price: Joi.number().required().precision(2),
// max is allowed only when type is A or B
// and subType is AA or BB.
max: Joi.alternatives()
.when('type', {
is: Joi.valid('A', 'B'),
then: Joi.alternatives().when('subType', {
is: Joi.valid('AA', 'BB'),
then: Joi.number(),
otherwise: Joi.forbidden()
}),
otherwise: Joi.forbidden()
})
})
});
const obj = {
type: 'A',
subType: 'AA',
rent: {
price: 3000.25,
max: 300.50,
}
};
const result = Joi.validate(obj, schema);
console.log(result.error);
Я ожидаю, что проверка не удастся, но это не так.