input.json
types.ts
点击转换生成 TypeScript 接口。

JSON 转 TypeScript 是怎么转的

粘贴一段有代表性的 JSON,点 Convert。根对象会变成 Root 接口,嵌套对象按属性名取名,比如 address 生成 Address。基础类型映射到你熟悉的 stringnumberbooleannull

数组和可选字段

遇到对象数组时,生成器会把每个样本元素里的键都收集起来。只要有一个元素缺了某个键,这个键就会带上 ? 变成可选。基础类型数组会生成 string[] 这类形式;样本里混了多种基础类型就生成联合类型数组。空数组会变成 unknown[] —— 样本里没有任何关于元素类型的线索。

把结果当成起点,而不是终点

生成器只能从你粘贴的这份样本里推测。一次成功的 API 响应,不可能暴露只在报错时才出现的字段,也看不出某个属性是不是可空(今天恰好有值而已),更列不全某个字符串字段允许的全部取值。另外,对象属性的类型是按第一次出现的值确定的,所以元素结构不一致的数组要格外小心。

用它省掉摸索新接口时手敲样板代码的功夫,然后对照真实的接口约定去改:把命名不好的接口重命名,补上缺失的联合类型和可空性,逐个确认哪些字段是真的可选。

TypeScript 不校验运行时数据

接口只帮编译器检查你的代码,JavaScript 一跑起来它就不存在了。把 response.json() 赋值给一个生成出来的类型,并不能证明服务端真的返回了那个结构。

在外部边界上,请用 JSON Schema 或运行时校验库验证载荷,再把验证过的值交给应用其余部分。运行时的 schema 和生成的接口,应该对应同一份约定。

什么场景下最好用

  • 摸索新接口时快速勾出类型;
  • 拿一份真实的测试数据生成初稿;
  • 在庞大的响应里理清嵌套结构;
  • 把样本和代码库里已有的接口对照着看。

不要粘贴真实的访问令牌或客户数据。把值换掉,但保留它们的类型和整体结构。