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

时间:2020-10-31 19:40:42

标签: javascript validation 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忽略对该包含的属性的验证?

0 个答案:

没有答案