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

在NestJS中如何正确校验数字数组类型的接口参数?

问题原因

你用错了校验装饰器的组合:

  • @ValidateNested 是专门用于嵌套对象/对象数组的校验,你要校验的是纯数字数组,不需要这个装饰器,反而会触发嵌套对象校验逻辑,要求数组每一项是对象/数组,所以才会返回你遇到的报错。
  • 基础类型数组的校验需要先加@IsArray()校验字段本身是数组格式,再用@IsNumber()搭配each: true参数校验每一项的类型。
解决方案

修改你的校验装饰器组合为如下代码即可:

@IsArray()
@IsNumber({}, { each: true })
users: number[];

参数说明

  • @IsArray():先校验users字段本身是数组类型
  • @IsNumber的第二个参数配置each: true:表示对数组的每一项都执行数字校验规则,第一个参数可以传入数字校验的额外配置,比如是否允许NaN、是否允许无穷大等,没有特殊要求传空对象即可。
额外注意事项

如果你同时用了NestJS的自动类型转换,要确保开启了enableImplicitConversion: true,否则字符串格式的数字比如"123"会被判定为不合法,需要在ValidationPipe的配置里开启:

// main.ts 里的ValidationPipe配置示例
app.useGlobalPipes(new ValidationPipe({
  enableImplicitConversion: true
}));

内容的提问来源于stack exchange,提问作者Ivelin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:24:03