如何使用Yup验证相互依赖的数字字段?

时间:2020-05-16 16:52:02

标签: typescript formik yup

我有一个具有相互依赖的数字字段的模型,并且正在努力查看如何使用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

1 个答案:

答案 0 :(得分:1)

似乎还有when的其他重载传递了被测试字段的值:

yup.object().shape({
a: yup
    .number(),
b: yup
    .number()
    .when('a', (a, schema) => return schema.max(a/2))