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;
}
}
我有多个端点 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;
}
}