Nestjs如何扩展partialtype(createDto)使createDto内的dtos的嵌套属性也可选

TG *_*son 11 nestjs

我有 UpdateUserDto:

export class UpdateUserDto extends PartialType(CreateUserDto) {

}
Run Code Online (Sandbox Code Playgroud)

创建用户Dto:

export class CreateUserDto {
  @ValidateNested({ each: true })
  @IsOptional()
  Point: CreateUserPointDto;
}
Run Code Online (Sandbox Code Playgroud)

创建用户点Dto:

 export class CreateUserPointDto{
  @IsString()
  name: string
  @IsString()
  color: string
  
}
Run Code Online (Sandbox Code Playgroud)

现在部分类型使 CreateUserDto 的所有属性都是可选的,问题是,它不会创建 CreateUserDto 内的 Point 的所有属性可选。

我该如何解决这个问题?

还有另一个不相关的问题,对 UpdateUser 中的 Point 的任何验证仅适用于{ PartialType } from '@nestjs/mapped-types'

如果我使用import { PartialType } from '@nestjs/swagger',对于相同的代码,它表示 Point.property 名称/颜色不应该存在。

for*_*nee 0

我确信您可能已经不再这样做了,但是如果您将来遇到这种情况,这里有一些可以解决问题的方法。

您需要使用@Type来自class-transformers来确保获得嵌套Point属性的类型。

示例代码

import { Type } from 'class-transformer';

export class CreateUserDto {
  @ValidateNested({ each: true })
  @IsOptional()

  @Type(() => CreateUserPointDto) // -> this line
  Point: CreateUserPointDto;
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于嵌套属性,因为它仍然检查 CreateUserPointDto 的所有属性 (2认同)