如何在NestJS(TypeScript)的Swagger中描述带计算属性的对象?
解决方法
要正确装饰这个动态键值对的hobbies属性,你需要结合@nestjs/swagger提供的装饰器和工具函数来指定对象的额外属性类型:
- 先导入所需依赖
import { ApiProperty, ApiExtraModels, getSchemaPath } from '@nestjs/swagger'; import { HobbyDto } from './hobby.dto'; // 引入你的HobbyDto文件
- 在当前DTO类上方添加
@ApiExtraModels(HobbyDto),让Swagger识别这个嵌套的DTO结构:
@ApiExtraModels(HobbyDto) export class UserDto { @ApiProperty() name: string; @ApiProperty() age: number; @ApiProperty({ type: 'object', additionalProperties: { $ref: getSchemaPath(HobbyDto) }, description: '任意爱好集合,键为爱好名称,值为对应的爱好详情' }) hobbies: { [key: string]: HobbyDto; }; }
如果你的Swagger版本支持简化写法,也可以直接这么写:
@ApiProperty({ type: Object, additionalProperties: { type: HobbyDto }, description: '任意爱好集合,键为爱好名称,值为对应的爱好详情' }) hobbies: { [key: string]: HobbyDto };
这样Swagger文档就会正确展示hobbies是一个以字符串为键、HobbyDto结构为值的动态对象,支持任意数量的键值对。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

