YUP条件对象验证不起作用

时间:2020-04-16 20:11:25

标签: javascript yup

我正在尝试为对象定义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 字段的条件验证集。 yup不支持when的对象类型,或者我做错了事。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

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

演示

Edit yup-strict-validation