JSON Schema转TypeScript类型生成器

输入JSON Schema自动生成对应的TypeScript interface代码,支持嵌套对象、数组、enum联合类型、required可选字段及$ref引用。

免费在线工具
Loading…

使用说明

1. 在左侧文本框输入 JSON Schema 内容(需为合法 JSON),可指定顶部「根类型名称」自定义生成的根接口名(默认为 Root)。

2. 右侧会实时生成对应的 TypeScript 类型定义代码:properties 转换为接口字段,required 数组中列出的字段生成为必填属性,未列出的字段自动加 ? 变为可选属性。

3. 支持嵌套 object(生成内联对象字面量类型)、array(含数组元素为对象/数组的嵌套情况)、enum(生成字符串或数字字面量联合类型,如 admin | member | guest 这样的字面量联合类型)。

4. Schema 中 definitions$defs 里定义的每个子 schema 会各自生成一个独立的 interface,正文中通过 $ref: #/definitions/Xxx 引用它们时会自动替换为对应的类型名进行引用,而不是重复内联展开。

5. 输入有误(JSON 格式错误、根节点不是对象等)时,右侧会显示具体错误提示。点击「加载示例数据」可快速填入一个包含上述各类语法的完整示例 Schema。

功能介绍

本工具解析 JSON Schema(覆盖 draft-07 常见语法子集)并生成对应的 TypeScript interface / type 定义代码,省去手写类型定义的重复劳动。

支持的语法覆盖:基础类型映射(string/number/integer/boolean/null)、propertiesrequired(非必填字段自动加 ?)、items(数组元素类型,包括元素本身是嵌套对象或嵌套数组的情况)、enum(生成字面量联合类型)、简单本地 $ref 引用(指向同一份 Schema 内 definitions / $defs 中定义的类型,生成独立 interface 并正确引用,而非重复内联)、嵌套 object(生成内联对象字面量类型)。

暂不支持 allOf / oneOf / anyOf 组合语义和跨文件的 $ref 引用,这类复杂 Schema 建议使用专门的代码生成工具链处理。

使用场景

对接后端接口时快速生成前端类型
后端提供了接口返回数据的 JSON Schema 定义,前端开发时不想手动照抄写一遍 TypeScript 类型,直接粘贴 Schema 一键生成 interface 代码。
同步维护 API 文档与前端类型定义
项目用 JSON Schema 作为 API 契约(如 OpenAPI/Swagger 的 schema 部分),每次契约变更后用本工具重新生成一遍类型代码,减少手动同步遗漏字段的问题。
校验自己写的 Schema 结构是否符合预期
编写复杂嵌套的 JSON Schema 时,通过查看生成的 TypeScript 类型代码,直观检查 required、enum、嵌套结构等设置是否达到了预期效果。
学习 JSON Schema 与 TypeScript 类型系统的映射关系
刚接触 JSON Schema 规范的开发者,通过对照输入的 Schema 和右侧生成的 TypeScript 代码,快速理解 properties/required/enum/$ref 等关键字分别对应 TypeScript 里的什么写法。

常见问题

支持 draft-07 之外的 JSON Schema 版本吗?
工具覆盖的是 draft-07 中最常用的一部分语法(type/properties/required/items/enum/$ref/嵌套 object),同时兼容较新草案里用 $defs 代替 definitions 的写法。更新版本草案里的一些特殊关键字(如 prefixItems 等)暂未特别支持。
为什么我的 allOf/oneOf/anyOf 没有正确转换?
这几种组合语义(交集类型、联合类型的多种变体、条件校验)在 TypeScript 里没有完全对等且直观的自动映射方式,容易生成语义不准确的类型代码,因此本工具暂不支持,遇到这类复杂 Schema 建议手动编写或使用支持更完整的专用代码生成工具链。
$ref 引用外部文件可以吗?
不可以,仅支持指向同一份 Schema 内部 definitions 或 $defs 的本地引用(如 #/definitions/Address),跨文件的 $ref(例如引用另一个 URL 或文件路径)暂不支持解析。
生成的字段顺序和 Schema 里的顺序一致吗?
一致,工具按 properties 对象里键出现的顺序依次生成对应的接口字段,不会自动重新排序。