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

OpenAPI Generator(TypeScript 6.4.0)生成枚举出现重名属性问题

解决OpenAPI Generator 6.4.0 TypeScript枚举重名问题(负号导致)

当Swagger定义的枚举包含带负号的数值字符串(如"-1"和"1")时,OpenAPI Generator默认会将非字母数字字符替换为下划线,导致两者生成的对象属性名均为_1,触发TS1117重名错误。以下是无需修改Swagger输入的解决方法:

方案1:使用内置配置参数调整枚举命名策略

TypeScript生成器提供enumPropertyNaming参数,设置为original可保留原始枚举值作为属性名(带引号),彻底避免重名:

生成命令示例:

openapi-generator generate -i swagger.json -g typescript-axios -o ./generated --enumPropertyNaming original

生成后的代码会变成:

export const ObjectRoleEnum = {
    "-1": '-1',
    "1": '1',
    "2": '2'
} as const;

TypeScript支持带特殊字符的引号包裹属性名,不会触发重名错误。

方案2:自定义模板修改枚举属性生成逻辑

如果enumPropertyNaming不符合需求,可自定义Mustache模板调整属性名生成规则,例如给负号开头的枚举值添加NEGATIVE_前缀:

  1. 找到TypeScript生成器的enum.mustache模板(通常位于generator资源目录的typescript子目录),复制到本地自定义模板目录。
  2. 修改模板中属性名生成部分:
    {{#startsWith value "-"}}NEGATIVE_{{trimStart value "-"}}{{/startsWith}}{{^startsWith value "-"}}{{{name}}}{{/startsWith}}: '{{{value}}}',
    
  3. 生成时指定自定义模板目录:
    openapi-generator generate -i swagger.json -g typescript-axios -o ./generated -t ./custom-templates
    
    最终"-1"会生成NEGATIVE_1属性,与"1"的_1不再冲突。

方案3:启用数字枚举(适用于纯数值字符串枚举)

若枚举值均为数字字符串,可设置enableNumericEnums=true生成数字枚举而非字符串枚举:

生成命令示例:

openapi-generator generate -i swagger.json -g typescript-axios -o ./generated --enableNumericEnums true

生成后的代码:

export enum ObjectRoleEnum {
    _1 = -1,
    _2 = 1,
    _3 = 2
}

注意此方案会将字符串转换为数字,需确认业务场景兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:45:34