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

nestjs-swagger生成typescript-axios客户端代码泛型异常求助

泛型生成异常问题可行解决方案

方案1:调整NestJS侧泛型Schema定义

核心是给泛型包装类生成的实例显式指定唯一类名,避免swagger生成匿名object类型的schema:

  1. 修改你的泛型包装工厂函数,显式设置生成类的name属性:
// 原PaginatedResponse泛型工厂调整
export function PaginatedResponse<T>(dto: ClassType<T>) {
  class PaginatedOfSpecificDto extends PaginatedDto {
    @ApiProperty({ type: [dto] })
    items: T[];
  }
  // 关键配置:给生成的泛型实例类设置唯一可识别的名称
  Object.defineProperty(PaginatedOfSpecificDto, 'name', { 
    value: `PaginatedResponseOf${dto.name}` 
  });
  return PaginatedOfSpecificDto;
}
  1. 接口返回注解直接传入生成好的具体类型即可:
@Get()
@ApiOkResponse({ type: PaginatedResponse(CreateCatDto) })
findAll() {
  // 业务逻辑实现
}

调整后重新生成OpenAPI规范,会自动生成名为PaginatedResponseOfCreateCatDto的独立Schema,不会出现泛型合并为交叉类型的问题。

方案2:新增openapi-generator生成参数

在原生成命令中添加泛型支持相关的附加参数,完整命令如下:

openapi-generator-cli generate -g typescript-axios  -i specFile.json -o . --additional-properties=useGenericResponse=true,modelPropertyNaming=original,supportsES6=true

参数useGenericResponse=true会强制生成器识别Schema中的泛型关联关系,不会将未匹配的泛型参数自动合并为object交叉类型。

方案3:中间层修正OpenAPI规范

如果前两种方案仍不生效,可以在生成OpenAPI规范之后、生成客户端代码之前,写一个简易的Node脚本遍历规范中的Schema定义,将所有PaginatedDto & object的引用替换为对应实际泛型实例Schema的引用,再执行客户端生成命令即可。


内容的提问来源于stack exchange,提问作者optimus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:45:05