首页 > 解决方案 > joi 根据另一个字段设置布尔默认值

问题描述

假设我有这个带有两个键 a 和 b 的对象。a 是字符串,b 是布尔值。我正在寻找的是如果 a 为空白,则 b 如果不是 false,则默认值为 true。

这个架构

Joi.object({
  'a': Joi.string(),
  'b': Joi.alternatives()
    .when('a', {
      is: '',
      then: Joi.boolean().default(true),
      otherwise: Joi.boolean().default(false)
    })
})

与对象引发错误“无法将备选方案与布尔值组合”

{ 
 a: '',
 b: false
}

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

标签: reactjsjoi

解决方案


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

推荐阅读