我想构建一个自定义 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)
});
我怎样才能实现这个目标?
您想在表单中使用它吗?例如用react-hook-form?