GEXNO / 指南 / JSON 转 TypeScript 类型定义:一键生成 interface,告别 any
JSON 转 TypeScript 类型定义:一键生成 interface,告别 any
拿到接口 JSON 手写 TypeScript 类型太累?在线把 JSON 转成 interface / type,嵌套对象自动拆类型,本地处理不上传。
为什么 TypeScript 项目离不开类型生成
前端接接口的第一步是把响应数据声明成类型:没有类型,TS 就退化成「带花括号的 JS」,any 满天飞,重构和代码提示全部失效。
手写类型的工作量与接口字段数成正比,而且接口一改就要同步维护。类型生成器把这个循环变成「粘贴 JSON → 复制 interface」,之后只需人工审查。
interface 还是 type?
两者在对象类型上能力几乎等价。团队惯例优先:多数项目接口建模用 interface、联合类型与工具类型用 type。生成器输出 interface,需要 type 时改个关键字即可。
实操:从响应样例到类型定义
打开 JSON 转 TypeScript 工具,粘贴一段接口响应,右侧立刻得到按嵌套层级拆分的 interface 定义,复制进 types.ts 就能用。
和本站其他工具一样,转换在浏览器本地完成——生产接口的样例数据不上传。
生成之后必做的三件事
- 审一遍可选性:样例里没出现的字段不代表不存在,接口文档里标记可空的字段补上 ?。
- 细化数组元素类型:工具可能输出宽泛类型,把泛型改成具体类型(string[]、Tag[])代码提示才完整。
- 收窄宽泛类型:「状态」「类型」这类枚举值字段,手改成字面量联合类型(type Status = "active" | "disabled")收益巨大;日期时间戳也别忘了语义化。
和 JSON 校验搭配使用
样例本身可能是坏的(复制时截断、带注释)。先过一遍 JSON 校验确认语法,再生成类型,能省掉一轮「为什么生成的类型是空的」的困惑。
常见问题
JSON 转 TypeScript 会上传我的数据吗?
GEXNO Tools 的转换在浏览器本地完成,粘贴的 JSON 不经过任何服务器。
生成的 interface 和 type 有什么区别?
对对象类型而言两者几乎等价。interface 可被继承与合并,type 擅长联合类型与映射类型。团队统一一种即可。
数组字段怎么生成类型?
数组会生成对应元素类型的 Array<T> 或 T[];元素结构不一致时建议人工复核并统一类型,具体推断行为以工具实际输出为准。
可空字段怎么表示?
样例中值为 null 的字段会生成联合类型 string | null 之类;建议人工确认该字段是否真的可为空。
字段名不是合法标识符怎么办?
生成时会用引号包裹处理;消费端通过 obj["weird-name"] 访问,或直接生成映射函数转成规范命名。