JSON 转 TypeScript
粘贴一段 JSON 示例,工具即可推断出与其结构匹配的 TypeScript 接口。字段类型根据观测到的值(string、number、boolean、Array<T>)确定;嵌套对象会获得各自的具名接口;而被观测为 null 或缺失的字段,则会根据你偏好的风格变为可选(?)或可为空(| null)。
如何将 JSON 转换为 TypeScript
-
1
粘贴 JSON
单个示例即可,但提供多个示例能提升对可空性和联合类型的推断准确度。
-
2
选择输出风格
`interface`(默认)、`type` 别名,或将所有字段标记为 `readonly` 的只读接口。
-
3
选择可选策略
将字段标记为 `?`(可能不存在)或 `| null`(始终存在,但可能为 null)。
-
4
复制类型
粘贴到 `.ts` 文件中,即可对 API 响应进行强类型访问。
示例
输入:
{ "id": 1, "name": "Alice", "age": null, "tags": ["admin", "user"], "address": { "city": "Madrid" } }
输出:
interface User {
id: number;
name: string;
age: number | null;
tags: string[];
address: Address;
}
interface Address {
city: string;
}
类型映射
| JSON | TypeScript |
|---|---|
| 字符串 | string |
| 整数 / 小数 | number |
| 布尔值 | boolean |
| 仅 null | null |
| null + T | T | null(或 T?) |
| T 的数组 | T[] |
| 混合数组 | (T1 | T2)[] |
| 对象 | 具名的嵌套接口 |
| 空数组 | unknown[](无法推断) |
可选字段与可空字段
foo?: string,该字段可能在对象中不存在,需进行undefined检查。foo: string | null,该字段始终存在,但可能被显式设为 null。foo?: string | null,可能不存在,也可能为 null。
JSON 本身没有 undefined,但不同 API 表示字段缺失的方式各异。请与你所用 API 的语义保持一致。
- REST API 通常会省略缺失字段 ->
?:。 - GraphQL 总是返回每一个请求的字段 ->
| null。 - 有些 SDK 会在不同场景下同时使用两种方式。
联合类型与字面量类型
如果工具在多个示例中发现同一个字符串字段只取少数几个值("status": "pending"、"active"、"archived"),它可以输出字符串字面量联合类型:
status: "pending" | "active" | "archived";
如需此行为,请启用「推断字符串字面量联合」。
常见错误
- 仅凭单个示例推断。 每个字段都会变为必填,无法观测可空性。要获得更好的类型,请提供 5-10 个多样化的示例。
- 空数组。
"tags": []不提供任何类型信息,生成器会输出unknown[]。请提供至少包含一个元素的示例。 - 混合类型数组。
[1, "two", true]会生成(number | string | boolean)[]。通常这意味着该 JSON 应当重新设计,而不是照原样定型。 - 数字字符串键。 JSON
{"1": "a", "2": "b"}在 TypeScript 中仍然是对象(Record<string, string>),而非数组。生成器会正确处理这种情况。
常见问题
与你的 API 保持一致。会丢弃 null 字段的 REST API 适合用 ?:。始终返回每个所选字段的 GraphQL 适合用 | null。拿不准时,采用必填语法的 T | null 更为严格,能在编译期捕获更多错误。
会。只要启用该功能并提供多个示例,在各示例中观测到 2-5 个不同字符串值的字段就会被输出为字面量联合类型。超过该阈值则回退为 string。
多数情况下用 interface,它对扩展开放,TypeScript 对其优化也更好。type 别名则适用于联合、交叉、元组和映射类型。对于从 JSON 派生的类型,两者都可以,按项目约定选择即可。
能。每个嵌套对象都会成为独立的接口,名称由键派生(user.address -> Address)。对于非常深或高度重复的结构,可考虑改用 JSON Schema 及专门的 schema-to-TS 生成器。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
邮箱验证器
验证邮箱地址:RFC 5322 语法检查、实时 MX 记录查询,并显示本地部分、域名和长度详情。不会发送任何邮件。
编辑器配置生成器
根据你的缩进样式与大小、行尾、字符集和空格规则生成 .editorconfig 文件,让不同集成开发环境(IDE)和编辑器的格式保持一致。
证书解码器
粘贴一张 X.509 PEM 证书,并查看解码后的字段:主体、颁发者、序列号、签名算法、有效期及主体备用名称(SAN)。
此工具还提供其他语言版本
- JSON till TypeScript [SV]
- تحويل JSON إلى TypeScript [AR]
- JSON naar TypeScript [NL]
- JSON เป็น TypeScript [TH]
- JSON sang TypeScript [VI]
- JSON ke TypeScript [ID]
- JSON a TypeScript [ES]
- JSONからTypeScriptへ [JA]
- JSON에서 TypeScript로 [KO]
- JSON vers TypeScript [FR]
- JSON zu TypeScript [DE]
- JSON do TypeScript [PL]
- JSON para TypeScript [PT]
- JSON в TypeScript [RU]
- JSON'dan TypeScript'e [TR]
- JSON to TypeScript [EN]
- JSON a TypeScript [IT]