我想实现我的自定义 zod 错误映射消息,但想知道如何在 zod 映射中创建自定义的 required_message?我在
zodIssuecode
的开关/盒子里找不到它。
在此之前,我必须为架构中的每个输入手动执行此操作。
zod 地图如下所示:
const customErrorMap: z.ZodErrorMap = (issue, ctx) => {
switch (issue.code) {
case z.ZodIssueCode.invalid_type:
if (issue.expected === "string") {
return { message: 'invalid_string' };
} else if (issue.expected === "number") {
return { message: 'invalid_number' };
} else {
return { message: 'invalid_type' };
}
case z.ZodIssueCode.custom:
return { message: issue.message || 'custom_error' };
case z.ZodIssueCode.invalid_union:
return { message: 'invalid_union' };
case z.ZodIssueCode.invalid_enum_value:
return { message: 'invalid_enum_value' };
case z.ZodIssueCode.unrecognized_keys:
return { message: 'unrecognized_keys' };
case z.ZodIssueCode.invalid_arguments:
return { message: 'invalid_arguments' };
case z.ZodIssueCode.invalid_return_type:
return { message: 'invalid_return_type' };
case z.ZodIssueCode.invalid_date:
return { message: 'invalid_date' };
case z.ZodIssueCode.invalid_string:
return { message: 'invalid_string' };
case z.ZodIssueCode.too_small:
return { message: 'too_small' };
case z.ZodIssueCode.too_big:
return { message: 'too_big' };
case z.ZodIssueCode.invalid_intersection_types:
return { message: 'invalid_intersection_types' };
case z.ZodIssueCode.not_multiple_of:
return { message: 'not_multiple_of' };
case z.ZodIssueCode.not_finite:
return { message: 'not_finite' };
default:
return { message: ctx.defaultError };
}
}
zod问题代码如下所示:
export declare const ZodIssueCode: {
invalid_type: "invalid_type";
invalid_literal: "invalid_literal";
custom: "custom";
invalid_union: "invalid_union";
invalid_union_discriminator: "invalid_union_discriminator";
invalid_enum_value: "invalid_enum_value";
unrecognized_keys: "unrecognized_keys";
invalid_arguments: "invalid_arguments";
invalid_return_type: "invalid_return_type";
invalid_date: "invalid_date";
invalid_string: "invalid_string";
too_small: "too_small";
too_big: "too_big";
invalid_intersection_types: "invalid_intersection_types";
not_multiple_of: "not_multiple_of";
not_finite: "not_finite";
};
显然这不是一个独立的问题,这意味着它在问题代码中不可用,但是,作为一种解决方法,我们可以查看
defaultError
中的 context
字段,如下所示:
const customErrorMap: z.ZodErrorMap = (issue, ctx) => {
if (ctx.defaultError === "Required") return { message: "required_error" };
switch (issue.code) {
// ...
}
}