Typescript + NestJs + Class Transformer:如何在响应 DTO 中使用泛型类型?

Typescript + NestJs + Class Transformer: How to use generic types in response DTO?

我有多个端点 return 包含分页详细信息的响应。我想使用一种父类型进行分页,并为 data 参数传入不同的数据类型。

我尝试了以下方法,但这没有用,因为 @Type 中的语句给出了错误 'T' only refers to a type, but is being used as a value here.,所以它需要 value/class 而不是类型:

export class PaginatedResponseDto<T> {
  @Expose()
  @ApiProperty()
  skip: number;

  @Expose()
  @ApiProperty()
  take: number;

  @Expose()
  @ApiProperty()
  count: number;

  @Expose()
  @ApiProperty()
  @Type(() => T[]) // <- this is not working, because I cannot use `T` here
  data: T[];

  constructor(data: any) {
    Object.assign(this, data);
  }
}

我搜索并 found this,这基本上是有效的,但不幸的是它似乎转换了两次响应,这会导致日期问题。

有没有其他方法可以做到这一点(而不是写多个 PaginatedResponseDto-类?

你可以沿着这条线做点什么...

export class PaginatedResponseDto<T> {

  @Exclude()
  private type: Function;

  @Expose()
  @ApiProperty()
  @Type(opt => (opt.newObject as PaginatedResponseDto<T>).type)
  data: T[];

  constructor(type: Function) {
    this.type = type;
  }
}