自定义 Zod 验证器

问题描述 投票:0回答:1

我想构建一个自定义 Zod 验证器,如下所示:

const stringOrNumberValidator = (val: any) => {
    if (typeof val === "number" && !isNaN(val)) {
        return val;
    } else if (typeof val === "string" && !isNaN(Number(val))) {
        return Number(val);
    } else {
        return "Invalid";
    }
};

const stringOrNumber = z.custom(stringOrNumberValidator);

const xSchema = z.object({
    age: stringOrNumber,
});

const data = {
    age: "2s0"
};

const ret = xSchema.safeParse(data);
console.log(ret);

上面的方法不起作用,并且总是返回 success 作为 true。如果我抛出错误而不是

return "Invalid"
,则会抛出错误并停止执行,尽管我使用了 safeParse

我还想使用内置的 Zod 函数(例如 min、max)扩展验证,如下所示

const xSchema = z.object({
    age: stringOrNumber.min(5).max(25)
});

我怎样才能实现这个目标?

javascript zod
1个回答
0
投票

您想在表单中使用它吗?例如用react-hook-form?

© www.soinside.com 2019 - 2024. All rights reserved.