博客
简体中文

JSON转TypeScript — 根据JSON生成类型

根据JSON样本推断TypeScript类型,包括嵌套对象和数组

在浏览器中处理 · 不上传任何内容

根据一个样本推断类型。属性均为必填,空数组为 unknown[],不同形状的数组元素组成联合类型。不会生成运行时校验代码。

结果

使用方法

  1. 粘贴一段来自接口响应或配置文件的 JSON 样本。
  2. 设置类型名称,例如 Root 或 ApiResponse。
  3. 把导出的类型别名复制到 TypeScript 文件中。
  4. 检查哪些属性在真实响应中可能缺失或为 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会上传吗?

不会。转换在你的浏览器中进行,输入内容不会上传,也不会保存。

没找到想要的工具?