paginação - Typescript + NestJs + Class Transformer: Como usar tipos genéricos em DTO de resposta?
Eu tenho múltiplos endpoints que retornam uma resposta incluindo detalhes de paginação. Eu gostaria de usar um tipo pai para a paginação e passar diferentes tipos de dados para o parâmetro data.
Eu tentei o seguinte, mas isso não estava funcionando porque a declaração em @Type gera o erro 'T' se refere apenas a um tipo, mas está sendo usado como um valor aqui., então ele espera um valor/classe e não um tipo:
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);
}
}
Eu pesquisei e encontrei isso, que basicamente funciona, mas infelizmente parece transformar a resposta duas vezes, o que causa problemas com datas.
Existe alguma outra maneira de fazer isso (em vez de escrever múltiplas classes PaginatedResponseDto)?
Resposta #1
Você pode fazer algo nesse sentido...
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;
}
}
