如何在zod错误图中实现自定义所需的错误?

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

我想实现我的自定义 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";
};
typescript zod
1个回答
0
投票

显然这不是一个独立的问题,这意味着它在问题代码中不可用,但是,作为一种解决方法,我们可以查看

defaultError
中的
context
字段,如下所示:

const customErrorMap: z.ZodErrorMap = (issue, ctx) => {
  if (ctx.defaultError === "Required") return { message: "required_error" };
  switch (issue.code) {
    // ...
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.