Zod 错误处理以及枚举上的自定义错误消息

Ism*_*_Aj 10 enums typescript zod

我想使用 Zod 验证性别字段z.nativeEnum(),但我的自定义错误消息不适用:

\n
gender: z.nativeEnum(Gender, {\n        invalid_type_error: \'Le sexe doit \xc3\xaatre homme ou femme.\',\n        required_error: \'Le sexe est obligatoire\',\n      }),\n
Run Code Online (Sandbox Code Playgroud)\n

但是当不选择选项时,显示的错误是:

\n

在此输入图像描述

\n

这里有什么错误?

\n

Ism*_*_Aj 14

我必须这样做,通过指定errorMap为返回一个对象的函数来保存每个问题的消息字段,如下所示:

\n
  gender: z.nativeEnum(Gender, {\n        errorMap: (issue, _ctx) => {\n          switch (issue.code) {\n            case \'invalid_type\':\n              return { message: \'Le sexe doit \xc3\xaatre homme ou femme.\' };\n            case \'invalid_enum_value\':\n              return { message: \'Le sexe doit \xc3\xaatre homme ou femme.\' };\n            default:\n              return { message: \'Sexe est invalide\' };\n          }\n        },\n      }),\n
Run Code Online (Sandbox Code Playgroud)\n


Rob*_*ell 5

您缺少错误路径之一invalid_enum_value。这是因为默认选项被视为可能的值:\'S\xc3\xa9lectionnez un option\'。此选项不是 zod 枚举Gender之一

\n
gender: z.nativeEnum(Gender, {\n        invalid_type_error: \'Le sexe doit \xc3\xaatre homme ou femme.\',\n        required_error: \'Le sexe est obligatoire\',\n        invalid_enum_value: \'Please select one of the options\'\n      }),\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

  • 感谢您的回答,它帮助我找到了解决方案,但并没有解决问题。 (2认同)