JSON转TypeScript — 根据JSON生成类型
根据JSON样本推断TypeScript类型,包括嵌套对象和数组
在浏览器中处理 · 不上传任何内容
根据一个样本推断类型。属性均为必填,空数组为 unknown[],不同形状的数组元素组成联合类型。不会生成运行时校验代码。
使用方法
- 粘贴一段来自接口响应或配置文件的 JSON 样本。
- 设置类型名称,例如 Root 或 ApiResponse。
- 把导出的类型别名复制到 TypeScript 文件中。
- 检查哪些属性在真实响应中可能缺失或为 null。
推断规则
字符串推断为 string,数字为 number,布尔值为 boolean,null 保持为 null。样本中出现的对象属性全部是必填属性。属性名会加上引号,所以中文、韩文、emoji 和标点都能作为合法的键。数组会把推断出的不同形状合并成联合类型,空数组则为 unknown[]。空对象推断为 Record<string, never>。
这是基于样本的推断,并不是在发现完整的结构定义。一次成功的响应不可能体现所有错误响应和可选字段。遇到重复的键时,工具会直接报错,而不是悄悄丢掉前面的值。注释和末尾逗号不是合法的 JSON。类型名称只能使用 ASCII 字母、数字、下划线或美元符号,不能以数字开头,也不能是保留字。输入最多 100 万个字符,推断最多支持 64 层嵌套。
示例
{"name":"小明","score":3,"tags":["中文","😀"]} 会把 name 推断为 string,score 推断为 number,tags 推断为 Array[1,"two",null] 会得到 Array<number | string | null>。
隐私
转换在浏览器中完成,不会上传或保存输入内容。生成的类型只是开发的起点,正式使用前请与接口文档中的约定进行对比。
常见问题
形状不同的对象会合并成可选属性吗?
不会。数组中形状不同的元素会组成这些形状的联合类型。请对照实际的接口约定检查结果。
空数组会推断成什么类型?
推断为 unknown[],因为样本里没有任何关于元素的信息。如果你知道元素类型,请手动收窄。
它会在运行时校验数据吗?
不会。它生成的是类型别名,不是解析器或校验函数。TypeScript 编译后类型就不存在了。
输入的JSON会上传吗?
不会。转换在你的浏览器中进行,输入内容不会上传,也不会保存。