如何避免在每个 dto 中为 NestJs-swagger 编写“@ApiProperty()”
How to avoid to write `@ApiProperty()` in each dto for NestJs-swagger
我正在研究如何避免在每个 dto 中指定 @ApiProperty() 的方法。
我知道有一种方法可以创建文件 nest-cli.json
,如果您在 nest-swagger 的控制器中指定 Promise<DTO>
,它将从路由中生成输出 dto。
结构如下所示:
nest-cli.json
{
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"plugins": [
{
"name": "@nestjs/swagger",
"options": {
"introspectComments": true
}
}
]
}
}
controller.ts
@Get()
async getMonitors (): Promise<OutputMonitorsDto> { // <-- Here is my outputDto
return this.monitorsService.getMonitors()
}
它大摇大摆地展示了这样的东西:
但是,有没有办法设置 NestJs 与 inputDTO 具有相同的东西,而不是在每个 dto 中写入 @ApiProperty
?
如下例所示:
ExampleDto.ts
export class GetListUsersDto {
@ApiProperty()
@IsString()
name: string
@ApiProperty()
@IsString()
email: string
@ApiProperty()
@IsString()
publicApiKey: string
@ApiProperty()
@IsBoolean()
isAdmin: boolean
@ApiProperty()
@IsBoolean()
isDesigner: boolean
@ApiProperty()
@IsBoolean()
isEditor: boolean
@ApiProperty()
@IsBoolean()
isEnabled: boolean
@ApiProperty()
@IsString()
boughtProduct: string
}
并且只有在@ApiProperty 之后它才会显示如上所示的结构,以便在 swagger 中输入。
装饰您的 DTO 属性是没有办法的。但是,如果您的 DTO 有很多共同点,您可能正在寻找 映射类型 。可以找到文档 here.
这些本质上允许您转换现有类型以保持 DTO 干燥。
我正在研究如何避免在每个 dto 中指定 @ApiProperty() 的方法。
我知道有一种方法可以创建文件 nest-cli.json
,如果您在 nest-swagger 的控制器中指定 Promise<DTO>
,它将从路由中生成输出 dto。
结构如下所示:
nest-cli.json
{
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"plugins": [
{
"name": "@nestjs/swagger",
"options": {
"introspectComments": true
}
}
]
}
}
controller.ts
@Get()
async getMonitors (): Promise<OutputMonitorsDto> { // <-- Here is my outputDto
return this.monitorsService.getMonitors()
}
它大摇大摆地展示了这样的东西:
但是,有没有办法设置 NestJs 与 inputDTO 具有相同的东西,而不是在每个 dto 中写入 @ApiProperty
?
如下例所示:
ExampleDto.ts
export class GetListUsersDto {
@ApiProperty()
@IsString()
name: string
@ApiProperty()
@IsString()
email: string
@ApiProperty()
@IsString()
publicApiKey: string
@ApiProperty()
@IsBoolean()
isAdmin: boolean
@ApiProperty()
@IsBoolean()
isDesigner: boolean
@ApiProperty()
@IsBoolean()
isEditor: boolean
@ApiProperty()
@IsBoolean()
isEnabled: boolean
@ApiProperty()
@IsString()
boughtProduct: string
}
并且只有在@ApiProperty 之后它才会显示如上所示的结构,以便在 swagger 中输入。
装饰您的 DTO 属性是没有办法的。但是,如果您的 DTO 有很多共同点,您可能正在寻找 映射类型 。可以找到文档 here.
这些本质上允许您转换现有类型以保持 DTO 干燥。