Swagger 为ApiParam和ApiQuery定义DTO

Swagger 为ApiParam和ApiQuery定义DTO,swagger,nestjs,Swagger,Nestjs,我正在使用,希望创建我的API文档。对于依赖于请求主体的端点,我可以为文档分配DTO类,如 @ApiBody({ type: CreateUserDTO }) 一些端点还依赖于请求参数或查询。对于params,我会做类似的事情 @ApiParam({ type: GetUserByIdDTO }) @ApiQuery({ type: GetUsersDTO }) (我知道这是一个糟糕的例子,因为用户id不需要DTO,但假设您想使用类验证器使用DTO类验证您的参数) 但我得到了这个错误 类型

我正在使用,希望创建我的API文档。对于依赖于请求主体的端点,我可以为文档分配DTO类,如

@ApiBody({ type: CreateUserDTO })
一些端点还依赖于请求参数或查询。对于params,我会做类似的事情

@ApiParam({ type: GetUserByIdDTO })
@ApiQuery({ type: GetUsersDTO })
(我知道这是一个糟糕的例子,因为用户id不需要DTO,但假设您想使用类验证器使用DTO类验证您的参数)

但我得到了这个错误

类型为“{type:typeof GetUserByIdDTO;}”的参数不可赋值 到类型为“ApiParamOptions”的参数。缺少属性“name” 在类型{type:typeof GetUserByIdDTO;}中,但在类型中是必需的 “apiparametadata”

对于查询,我会做如下操作

@ApiParam({ type: GetUserByIdDTO })
@ApiQuery({ type: GetUsersDTO })
然后得到这个错误

类型为“{type:typeof GetUsersTo;}”的参数不可分配给 “ApiQueryOptions”类型的参数。中缺少属性“name” 类型“{type:typeof GetUsersDTO;}”,但在类型中是必需的 “ApiQueryMetadata”


因此,
APIBody
修饰符似乎工作得很好,但是如何修复我的
APIParam
apipquery
修饰符?

@apipquery
@APIParam
在使用命名参数/查询时是必需的,比如
@query('pageSize')
o
@Param('id')
。在这种情况下,NestJS Swagger模块应该直接从指定的DTO对象提取信息,如:

async findElements(@Query() query: ElementsQueryDto) {
  // ...
}

需要注意的一点是,dto应该是类,而不是接口。

我用
ApiProperty
decorator记录了我的dto字段。是的,这似乎足够了。所以你说没有必要使用
ApiQuery
ApiParam
decorior,因为这段代码很好
public getUsers(@Query()getUsersDTO:getUsersDTO):Promise{/*…*/}
,因为swagger模块将自己记录来自dto的字段?确切地说,这是swagger nestjs模块的默认行为,ApiQuery或ApiParam旨在作为一种后备/短消息,用于不需要Dto的简单场景。