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_前缀:
- 找到TypeScript生成器的
enum.mustache模板(通常位于generator资源目录的typescript子目录),复制到本地自定义模板目录。 - 修改模板中属性名生成部分:
{{#startsWith value "-"}}NEGATIVE_{{trimStart value "-"}}{{/startsWith}}{{^startsWith value "-"}}{{{name}}}{{/startsWith}}: '{{{value}}}', - 生成时指定自定义模板目录:
最终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
相关产品推荐
相关产品推荐

