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

标签 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

最佳答案

看来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/

相关文章:

reactjs - 如何使用 Jest 和 Enzyme(useField Hook)为 Formik 驱动的输入组件编写测试?

javascript - 如何正确使用 Yup/formik 数字验证 ReactJs

javascript - 是的,基于嵌套对象内的嵌套对象进行验证

javascript - 当依赖项未使用 '*' 导入时,如何在 WebPack 中将依赖项标记为外部?

javascript - 用 Formik react 备忘录

node.js - 输入goose + Nestjs + mongodb : index not creating using @index decorator

reactjs - 是的(使用 formik 和 react)——无法验证数组长度

javascript - 在 React 中根据状态设置表单的值

typescript - 用于在 Visual Studio 和 Visual Studio Team Services 构建中运行 TypeScript 测试的 Chutzpah 配置

node.js - 如何将我的 Typescript Node.js 应用程序部署到 Heroku?