yup中的条件验证仍会验证不应验证的字段

问题描述

我有一个包含子对象的复杂对象。我只想在设置了条件的情况下验证子对象。

将其简化为一个超级基本的示例,可以说我有一只宠物,而宠物可以是狗。 当它是一条狗时,我要验证包含的狗属性“ barkLevel”以确保已定义它。但是,当它不是狗时,可以使用现有的dog属性,但是我想在验证中忽略它。似乎yup仍然可以验证狗的属性,即使我不想验证它。

以下是演示该问题的代码

import * as yup from "yup";

const dogSchema = yup.object().shape({
  barkLevel: yup.number().required()
});

const petSchema = yup.object().shape({
  isDog: yup.boolean(),dog: dogSchema.when("isDog",{
    is: true,then: dogSchema.required()
  })
});

async function main() {
  try {
    await petSchema.validate({
      isDog: false,dog: {
      }
    });
  } catch (e) {
    console.log(e);
  }
}

main();

您可以在this sandbox

中运行以上代码

以上代码记录了错误:“ ValidationError:dog.barkLevel是必填字段”

如果isDog为假,如何告诉yup忽略对该包含的属性的验证?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...