问题描述
假设我有一个带有两个键 a 和 b 的对象。 a 是字符串,b 是布尔值。我正在寻找的是,如果 a 为空,则 b 的默认值为 true 如果不是 false。
这个架构
Joi.object({
'a': Joi.string(),'b': Joi.alternatives()
.when('a',{
is: '',then: Joi.boolean().default(true),otherwise: Joi.boolean().default(false)
})
})
对象抛出错误“无法将替代项与布尔值组合”
{
a: '',b: false
}
这可能超出了 Joe 的意思,但我很好奇。
解决方法
.default() 可以接受带有参数的函数(父级、助手),通过父级你可以访问任何对象值并执行如下操作:
const schema = Joi.object({
a: Joi.string().allow(''),b: Joi.boolean().default((parent) => parent.a == '')
})
// Object {value: Object {a: "",b: true}}
schema2.validate({ a: '' })
// Object {value: Object {a: "",b: false}}
schema2.validate({ a: 'aaa' })