You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为class-validator自定义装饰器设置默认错误消息?

问题:为class-validator的IsISO6391装饰器设置默认错误消息

我基于class-validator开发了IsISO6391装饰器,当用户使用该装饰器时,如果没有在validationOptions中定义message字段,约束校验会返回空字符串''作为错误信息。现有代码如下:

export function IsISO6391(validationOptions?: ValidationOptions) {
  return function (object: Object, propertyName: string) {
    registerDecorator({
      name: 'IsISO6391',
      target: object.constructor,
      propertyName: propertyName,
      constraints: [],
      options: validationOptions,
      validator: {
        validate,
      }
    });
  };
}

请问该如何为这个装饰器设置默认错误消息?


解决方案

你可以通过合并默认配置与传入的validationOptions来设置默认错误消息,核心逻辑是优先使用用户传入的message,若未传入则启用自定义默认值。具体修改如下:

export function IsISO6391(validationOptions?: ValidationOptions) {
  // 定义包含默认错误消息的基础配置
  const defaultOptions: ValidationOptions = {
    message: '该字段必须是有效的ISO 639-1语言代码'
  };
  // 合并默认配置与用户传入配置,用户配置会覆盖对应字段
  const mergedOptions = { ...defaultOptions, ...validationOptions };

  return function (object: Object, propertyName: string) {
    registerDecorator({
      name: 'IsISO6391',
      target: object.constructor,
      propertyName: propertyName,
      constraints: [],
      options: mergedOptions,
      validator: {
        validate,
      }
    });
  };
}

关键说明

  • 先创建包含默认message的defaultOptions对象,定义你期望的默认错误提示文本
  • 使用对象展开运算符...合并默认配置与用户传入的validationOptions,用户传入的配置会自动覆盖默认配置中的同名字段
  • 将合并后的mergedOptions传入registerDecorator的options参数

这样修改后,当用户未指定message时,校验会自动返回你设置的默认错误消息;如果用户传入了自定义message,则优先使用用户配置的内容。

内容的提问来源于stack exchange,提问作者Tiago Bértolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:53:24