我有一个包含子对象的复杂对象。我只想在设置了条件的情况下验证子对象。
将其简化为一个超级基本的示例,可以说我有一只宠物,而宠物可以是狗。 当它是一条狗时,我要验证包含的狗属性“ 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忽略对该包含的属性的验证?