joi 根据另一个字段设置布尔默认值

joi setting boolean default value based on another field

假设这个对象有两个键 a 和 b。 a 是字符串,b 是布尔值。我正在寻找的是,如果 a 为空,则 b 的默认值为 true if not 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
}

这可能超出了乔的本意,但我很好奇。

.default() 可以接受带有参数(parent,helpers)的函数,有了 parent 你可以访问任何对象值并做这样的事情:

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' })