Как преобразовать отдельное свойство DTO в класс? - PullRequest
0 голосов
/ 19 июня 2020

Я использую nest Js с Typescript, и мне нужно преобразовать одно свойство тела запроса. Я знаю, что преобразование выполняется с помощью каналов, но все, что я смог найти, это примеры преобразования всего тела запроса, а не единственного значения в нем. Этот был одним из примеров.

Так как же можно достичь sh этого? Я добавил пример кода, чтобы обозначить проблему. Существует сложный тип Photo и DTO, где свойство photo должно иметь тип Photo. Теперь, когда поступает запрос, это свойство необходимо преобразовать из исходного типа string в Photo.

// Photo.ts
export class Photo {
  readonly name: string;

  constructor(name: string){
    this.name = name.toUpperString();
  }

  // not the most useful example function
  public function getName(){
    return 'IMG-' + this.name;
  }
}
// add-photo-dto.ts
export class AddPhotoDto {
  @IsNotEmpty()
  readonly id: number;

  @IsNotEmpty()
  // @IsPhoto() (for validation, but not relevant for transformation)
  readonly photo: Photo;
}
// photo.controller.ts
@Post('/photo')
addPhoto(@Body(new ValidationPipe()) dto: AddPhotoDto, @Res() res: Response) {
  const name = dto.photo.getName(); // How to make this work?
  res.send({smollName: name})
}

Я искал возможность использовать декоратор @Type(() => Photo), но не заставил его работать.

...