ZeroTool Workbench

OpenAPI 转 TypeScript 生成器

在浏览器中将 OpenAPI 3.0/3.1(YAML/JSON)转换为 TypeScript 接口。支持 $ref、oneOf/allOf、enum、nullable,可选 Zod schema 输出,零上传。

100% 浏览器端运行 数据不离开你的设备 免费 · 无需注册
OpenAPI 规范(YAML 或 JSON)
TypeScript 输出

使用方法

  1. 将 OpenAPI 3.0.x 或 3.1.x 文档(YAML 或 JSON)粘贴到左侧面板。
  2. 输入后会以 300 ms 防抖实时生成类型。
  3. 可选:调整 根命名空间、把所有属性标记为可选、附加 path 操作类型、或同时输出 Zod schema。
  4. 点击 复制 即可拿到完整的 TypeScript 输出。

生成内容

  • components/schemas:每个 schema 输出一个 export interfaceexport type,对象类型用 interface,基本/联合/枚举/交叉类型用 type alias。
  • $ref#/components/schemas/... 引用会被解析为对应类型名,并按规范声明顺序输出。
  • oneOf / anyOf:转为联合类型 A | B | CallOf 转为交叉类型 A & B
  • enum:转为字符串或数字字面量的联合类型。
  • nullable:3.0 的 nullable: true 与 3.1 的 type: ['X', 'null'] 都转为 X | null
  • format 提示format: date-time 会附带 ISO 8601 的 JSDoc 注释;format: binary 转为 Blob
  • additionalProperties:转为索引签名或 Record<string, T>

Path 类型(可选)

勾选 包含 path 类型 后,每个操作都会产出一个类型封装:

export namespace Components {
export namespace GetPetById {
  export interface PathParameters {
    id: number;
  }
  export type Response200 = Pet;
}
}

如果操作没有 operationId,工具会按 method + path 合成一个,例如 GetPetsId

Zod schema(可选)

勾选 包含 Zod schema,会为每个 component 输出同名 XSchema

import { z } from 'zod';

export const PetSchema = z.object({
id: z.number().int(),
name: z.string(),
status: z.enum(["available", "pending", "sold"]),
});

若你的项目是从手写 TS 类型反推 Zod,可改用 TypeScript 转 Zod

相关工具

FAQ

支持哪些 OpenAPI 版本?

支持 3.0.x 与 3.1.x。OpenAPI 3.1 的 `type: ['string', 'null']` 写法会输出 `string | null`,OpenAPI 3.0 的 `nullable: true` 也会被识别。

支持 Swagger 2.0 吗?

按设计不支持 Swagger 2.0。请先用 editor.swagger.io(Swagger Editor 内置的转换功能)把规范升级到 OpenAPI 3.x,再粘贴到本工具。

远程 $ref 会被解析吗?

仅解析 `#/components/schemas/...` 形式的内部 $ref。指向外部 URL 或文件路径的 $ref 不会被拉取。请把外部 schema 先内联到当前文档,或改用 openapi-typescript CLI 处理这种情况。

我的规范会被上传吗?

完全不会。解析、$ref 解引用、TypeScript 生成全部在浏览器内完成,没有后端,也不上报规范内容。

可以同时输出 Zod schema 吗?

可以。勾选 **包含 Zod schema** 即可在 TypeScript 接口旁边生成对应的 `z.object({...})`,适合需要运行时校验与静态类型保持一致的场景。

「包含 path 类型」做什么?

为每个操作生成一个命名空间,暴露 `PathParameters`、`QueryParameters`、`RequestBody`、`Response200`/`Response201` 等类型,外层用你设置的根命名空间包裹。如果只需要 DTO 接口可不勾选。