是的条件对象验证不起作用

Yup conditional object validation not working

我正在尝试为对象定义 Yup 验证 - 如果已定义的兄弟项设置为 true,则字段类型为 object 应该是必需的,否则不是

示例:

const { object, string, number, date, boolean } = require('yup')

const contactSchema = object({
  isBig: boolean(),
  count: number()
    .when('isBig', {
      is: true, // alternatively: (val) => val == true
      then: number().min(5),
      otherwise: number().min(0),
    }),
 complexOne: object({
    simpleOne: string(),
 })
 .when('isBig', {
     is: true,
     then: object().required(),
     otherwise: object(),
 })
})

传入验证的对象:

{
    isBig: true,
    count: -1,
}

如您所见,我故意不通过 complexOne 因为我想让 Yup 显示错误。 count 的验证工作正常 - 如果值小于 0 并且 isBig 设置为 true, Yup 将正确显示错误消息 ValidationError: count must be greater than or equal to 5

不幸的是,它完全忽略了 complexOne 字段的条件验证集。是的,要么不支持对象类型的 when,要么我做错了什么。

感谢您的帮助

您必须将 strict 选项设置为 true 以便仅验证对象,并跳过任何强制转换或转换:

contactSchema.validate(contact, { strict: true })
.then(obj => {
  console.log(obj)
}, err => {
  console.log(err.message)
})

演示: