我有一个包含相互依赖的数字字段的模型,我正在努力了解如何使用 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
最佳答案
看来when
还有其他重载传递测试字段的值:
yup.object().shape({
a: yup
.number(),
b: yup
.number()
.when('a', (a, schema) => return schema.max(a/2))
关于typescript - 如何使用 Yup 验证相互依赖的数字字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61840374/