You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NestJS(TypeScript)的Swagger中描述带计算属性的对象?

解决方法

要正确装饰这个动态键值对的hobbies属性,你需要结合@nestjs/swagger提供的装饰器和工具函数来指定对象的额外属性类型:

  1. 先导入所需依赖
import { ApiProperty, ApiExtraModels, getSchemaPath } from '@nestjs/swagger';
import { HobbyDto } from './hobby.dto'; // 引入你的HobbyDto文件
  1. 在当前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:17:02