精准映射:JSON To TypeScript定义 — Numio
根据 API 响应等 JSON 示例生成 TypeScript interface 或类型别名。会处理嵌套、null 和混合数组,转换在浏览器中进行。
为 API 响应创建具名的 TypeScript 类型。
Converted in your browser. Null stays a value type; ? marks a field missing from some objects in an array. Empty arrays use unknown elements.
JSON
TypeScript
适用场景
- 为 API 响应创建具名的 TypeScript 类型。
- 比较数组中的多个对象,查看不同的类型和可选字段。
使用方法
- 粘贴真实 JSON 或加载某个示例。加载示例会替换你的输入。
- 设置根类型名,并选择 interface(嵌套对象成为独立类型)或 type(一个类型别名,嵌套对象内联)。
- 检查 null、可选(?)字段以及 string/number 联合类型,然后复制类型。
JSON 输入
[{"id":1,"name":"Tokyo"},{"id":2}]TypeScript 输出(Root,interface)
export type Root = RootValueItem[];
export interface RootValueItem {
id: number;
name?: string;
}功能与限制
会检查每个数组元素。示例中第二个对象缺少 name,因此它变为可选;而存在但值为 null 的字段会变为与 null 的联合类型。
空数组得到 unknown[]。混合数组变为联合类型的数组,而不是定长元组。
类型只覆盖示例中出现的内容。从未出现的字段、日期或邮箱格式、取值范围以及字段之间的关系都不会推断。
输入必须是标准 JSON;请先用 JSON 格式化工具清理注释或末尾逗号。带前导零的 ID 请以字符串输入。
输入上限为 1,000,000 个字符、约 64 层嵌套和 50,000 个值。TypeScript 类型不会在运行时校验数据。
FAQ
应该生成 interface 还是 type?
两者描述的结构相同。interface 为每个嵌套对象创建一个具名 interface,便于复用;type 创建单个类型别名,嵌套对象以内联方式写出。
能生成 TypeScript class 吗?
不能,只生成 interface 或类型别名。如果需要运行时校验,请使用 JSON 转 Zod,并按你的规则调整 schema。
null 和可选字段有什么区别?
{"name":null} 有 name,值为 null;{} 则完全没有 name。null 会保留在类型中,只有当同一数组中的部分对象缺少该字段时才会加上 ?。
根节点为 JSON 数组时会生成什么?
一个表示数组的类型别名和一个表示元素的 interface,如上例中 Root 为 RootValueItem[]。