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

如何配置openapi-typescript生成TypeScript枚举而非字符串联合类型?

解决openapi-typescript生成TypeScript枚举的问题

核心方案

openapi-typescript 默认会把 OpenAPI 的 enum 转为 TypeScript 字符串联合类型,但可以通过以下两种方式生成你需要的枚举:

方式1:使用工具内置的枚举生成支持(v6+版本)

在你的 OpenAPI Schema 中添加 x-enumNames 扩展字段(如果枚举键和值一致,这个字段可以省略,但加上更明确):

openapi: 3.0.1
info:
  title: test enums
  description: test enums
  version: "1.00"

components:
  schemas:
    VideoProcessingStateDto:
      type: string
      enum:
        - IN_PROGRESS
        - FAILED
        - FINISHED
      x-enumNames: # 对应枚举的键名,和enum值一致时可省略
        - IN_PROGRESS
        - FAILED
        - FINISHED

然后在命令行执行时加上 --enum 参数:

openapi-typescript your-api-spec.yaml --enum --output types.ts

执行后就能生成你期望的 TypeScript 枚举代码。

方式2:自定义后处理脚本(兼容旧版本)

如果你的 openapi-typescript 版本低于v6,或者不想修改 OpenAPI Schema,可以写一个简单的脚本,将生成的联合类型替换为枚举。比如用 Node.js 脚本匹配目标类型并替换:

const fs = require('fs');
const content = fs.readFileSync('./types.ts', 'utf8');

const updatedContent = content.replace(
  /\/\*\* @enum \{string\} \*\/\nVideoProcessingStateDto: "IN_PROGRESS" | "FAILED" | "FINISHED";/,
  'export enum VideoProcessingStateDto {\n  IN_PROGRESS = \'IN_PROGRESS\',\n  FAILED = \'FAILED\',\n  FINISHED = \'FINISHED\',\n}'
);

fs.writeFileSync('./types.ts', updatedContent);

执行这个脚本就能完成替换。

补充说明

openapi-typescript 默认生成联合类型是因为在多数 TypeScript 场景下,联合类型和枚举的功能等价且更轻量,但如果业务场景必须使用枚举,上述两种方法都能满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:43:21