Я думаю, вы хотите, чтобы номер телефона был необязательный , если массив типов уведомлений не включает смс и требуется , если это так, вы можете определитьчто-то вроде этого:
const schema = Joi.object({
notification_type: Joi.array().items(
Joi.string().valid('email', 'sms')
),
customer: Joi.object({
phone_number: Joi.string(),
})
}).when(Joi.object({
notification_type: Joi.array().items(
Joi.string().valid('sms').required(),
Joi.string().valid('email').optional()
)
}).unknown(), {
then: Joi.object({
customer: Joi.object({
phone_number: Joi.string().required()
}).required()
}),
otherwise: Joi.object({
customer: Joi.object({
phone_number: Joi.optional()
})
})
});
Итак, следующий объект будет принят:
{
notification_type:[
'sms',
'email'
],
customer:{
phone_number:'111-222-333'
}
}
, а это не будет:
{
notification_type:[
'sms'
],
customer:{
}
}