JSON 转 TypeScript
JSON 自动生成 TypeScript 接口
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
选项
生成的 TypeScript
export interface RootOwner {
name: string;
email: null;
}
export interface RootItems {
sku: string;
price: number;
note?: string;
}
export interface Root {
id: number;
name: string;
isActive: boolean;
score: number;
owner: RootOwner;
tags: string[];
items: RootItems[];
meta: null;
}结果摘要: 类型数 3 · 字段数 13 · 命名冲突 0
类型完全由 JSON 推断:嵌套对象各自成一个 interface,数组按元素合并类型(同构是 T[],异构是联合类型),值为 null 的字段写成 T | null,只在部分数组元素里出现的字段用 ? 标成可选。生成结果仅供参考,请按项目规范微调。
这个工具能做什么
- 对接接口时把返回的 JSON 样例变成 TypeScript interface,前端马上就有类型可用,不用照着文档一个个字段抄。
- 值为 null 的字段写成 T | null,只在部分数组元素里出现的字段用 ? 标成可选,这两点决定了调用方要不要写空值判断。
- 键名不是合法标识符(含 -、空格等)时会写成带引号的属性名,生成的接口一定能通过编译。
- 给 mock 数据或测试夹具补类型:勾选 readonly 可以生成不可变接口,勾选 export 可以直接放进 .d.ts 或模块里。
示例
输入
{"id":1,"name":"UniKit","tags":["a","b"]}输出
export interface Root {
id: number;
name: string;
tags: string[];
}TypeScript 只有一种数字类型,所以整数和小数都写成 number;null 字段写成 T | null,可选字段用 ? 标记。
常见问题
为什么整数和小数都是 number?
TypeScript 的 number 就是 IEEE 754 双精度浮点,没有单独的 int 类型。想在运行时区分整数,只能靠额外的校验函数或 branded type。
可空字段和可选字段有什么区别?
值为 null 的字段生成 id: number | null(该键必须存在但值可能是 null,需要判空);只在部分数组元素里出现的键生成 id?: number(该键可能根本不存在,还要先判断键是否存在)。如果这个键在所有样例里都只是 null,会直接写成 null 类型。
数组里元素类型不一致会怎样?
会合并成联合类型,例如 [1, "a"] 得到 (number | string)[],可空元素写成 (string | null)[]。嵌套联合类型会自动加括号,保证优先级正确。
生成的接口能直接用吗?
类型是从一份样例推断出来的,只能保证这份样例合法。真实接口可能有别的分支(某字段有时是字符串有时是对象),建议对着文档检查一遍再放进项目。
我的 JSON 会被上传吗?
不会。解析和代码生成都在浏览器本地完成,不发网络请求,断网可用。
关键词:jsontypescriptinterfacejson to typescripttype inferencejson 转 typescriptJSON 转接口类型推断接口生成代码生成