Если вы хотите проверить ключи type и subType ваша проверка должна идти после объекта, например:
const schema = Joi.object({
type: Joi.string().valid('A', 'B', 'C'),
subType: Joi.string().valid('AA', 'BB', 'X'),
rent: Joi.object({
amount: Joi.number(),
price: Joi.number().required().precision(2),
})
}).when(Joi.object({
type: Joi.string().valid('A', 'B').required(),
subType: Joi.string().valid('AA', 'BB').required()
}).unknown(), {
then: Joi.object({
rent: Joi.object({
amount: Joi.number().required()
})
}),
otherwise: Joi.object({
rent: Joi.object({
amount: Joi.forbidden()
})
})
});
Это результаты дляследующие примеры:
// FAIL - requires amount
const obj = {
type: 'A',
subType: 'BB',
rent: {
price: 10
}
};
// FAIL - amount is not allowed
const obj = {
type: 'A',
subType: 'X',
rent: {
amount: 3000.25,
price: 300.50
}
};
// SUCCESS
const obj = {
type: 'A',
subType: 'BB',
rent: {
amount: 3000.25,
price: 300.50
}
};
// SUCCESS
const obj = {
type: 'A',
subType: 'X',
rent: {
price: 300.50
}
};