如何在 DTO NestJs 上设置默认值?

erm*_*mir 9 validation default node.js typescript nestjs

import { IsString, IsNumber, IsOptional, IsUUID, Min, Max } from 'class-validator';
import { Transform } from 'class-transformer';

export class QueryCollateralTypeDto {
  @Transform(({ value }) => parseInt(value))
  @IsNumber()
  @IsOptional()
  page: number;

  @Transform(({ value }) => parseInt(value))
  @IsNumber()
  @IsOptional()
  limit: number;

  @IsString()
  @IsOptional()
  select: string;
}
Run Code Online (Sandbox Code Playgroud)

我想设置页面的默认整数值以及选择的限制和字符串值(例如整数 1 的页面值、整数 10 的限制值以及“field1,field2,...”的选择值)

erm*_*mir 33

好吧,我找到了一个解决方案,我想你只需在 DTO 中初始化变量即可

import { IsString, IsNumber, IsOptional, IsUUID, Min, Max } from 'class-validator';
import { Transform } from 'class-transformer';

export class QueryCollateralTypeDto {
  @Transform(({ value }) => parseInt(value))
  @IsNumber()
  @IsOptional()
  page: number = 1;

  @Transform(({ value }) => parseInt(value))
  @IsNumber()
  @IsOptional()
  limit: number = 10;

  @IsString()
  @IsOptional()
  select: string = 'name,description';
}
Run Code Online (Sandbox Code Playgroud)


Sor*_*ari 2

如果您属于这种情况,您可以在服务和使用数据的函数中设置默认值,如下例所示。如果您不向函数传递任何值,则会设置默认值。

exampleFunction(data: QueryCollateralTypeDto) {
    const { page = 1, limit = 10, select = 'field1' } = data;
    ...
}
Run Code Online (Sandbox Code Playgroud)