我有一个具有相互依赖的数字字段的模型,并且正在努力查看如何使用yup来设置复杂的验证。
为简单起见,想象一个具有以下形状的对象:
{
a: number,
b: number
}
我想验证b
小于a
的一半。
所以从概念上讲,我想要的是这样的东西:
yup.object().shape({
a: yup
.number(),
b: yup
.number()
.max(a/2) <-- DOES NOT WORK
当然,这是行不通的,因为该范围中没有a
。
使用test
,我看不到如何将整个对象放入范围:
yup.object().shape({
a: yup
.number(),
b: yup
.number()
.test('test', 'b should be less than a/2', b => b < a/2) <-- DOES NOT WORK
使用when
(条件验证)似乎也无济于事,尽管它似乎用于相互依赖字段的复杂验证:
yup.object().shape({
a: yup
.number(),
b: yup
.number()
.when('a', {is: true, then: yup.number().max(a/2)}) <-- DOES NOT WORK
答案 0 :(得分:1)
似乎还有when
的其他重载传递了被测试字段的值:
yup.object().shape({
a: yup
.number(),
b: yup
.number()
.when('a', (a, schema) => return schema.max(a/2))