NestJs Swagger:如何为动态 类 定义 Api 属性

NestJs Swagger: How to define Api Property for dynamic classes

我有以下class

export class DocumentsSteps {
    @ApiProperty({type: ???})
    [type: string]: DocumentStep;
}

我应该如何定义 ApiProperty 类型?

看看这个

https://docs.nestjs.com/custom-decorators#decorator-composition

您可以实现另一个装饰器来扩展 ApiProperty

export function CustomApiProperty(type: string) {
  return applyDecorators(
    ApiProperty({type, ...}),
  );
}

截至目前(2021 年 9 月 21 日),Nest 的 @nestjs/swagger 库无法做到这一点,因为没有字段可以反映元数据。可能有机会 open a pull request to allow for the use of dictionaries 使用该库,但现在你最好的选择是修改 Nest 生成的 swagger 文档并在此时自行添加它

你可以用函数包装它

export type Constructor<I> = new (...args: any[]) => I

function ErrorDto(statusCode: number, message: string): Constructor<Error>{
  class Error implements Error{
    @ApiProperty({ example: statusCode })
    readonly statusCode: number

    @ApiProperty({ example: message })
    readonly message: string

  }
  return Error
}
export class UnauthorizedErrorDto extends ErrorDto(401, 'Unauthorized'){}
export class BadRequestErrorDto extends ErrorDto(400, 'Bad Request'){}