TypeScript是否有原生类型可指代JSON数据类型?
TypeScript 中如何定义覆盖所有 JSON 数据类型的类型
TypeScript 并没有原生内置的关键字直接指代所有合法的 JSON 数据类型,但你可以自行定义一个精确的JsonDataType类型,完美覆盖 JSON 支持的所有结构,避免手动写冗长的联合类型。
定义 JSON 数据类型
JSON 的合法结构包括:字符串、数字、布尔值、null,以及由这些类型组成的对象和数组。可以通过递归类型和接口来实现:
// JSON 原始类型:string/number/boolean/null(注意 JSON 不支持 undefined) type JsonPrimitive = string | number | boolean | null; // 递归定义 JSON 数组和对象 type JsonDataType = JsonPrimitive | JsonArray | JsonObject; interface JsonObject { [key: string]: JsonDataType; } interface JsonArray extends Array<JsonDataType> {}
使用示例
定义好之后就可以像你期望的那样使用:
// 符合 JSON 规范的赋值 let validData: JsonDataType = { username: "Tiago", score: 95, passed: true, tags: ["frontend", "typescript"], extraInfo: null }; // 包含 undefined 的赋值会触发类型检查错误(因为 undefined 不属于 JSON 合法类型) let invalidData: JsonDataType = { temp: undefined // 类型报错 };
注意事项
- 不要用
any代替:any会完全失去 TypeScript 的类型校验能力,自定义的JsonDataType能确保变量符合 JSON 结构规范。 - 不要用
unknown:unknown是所有类型的父类型,无法约束值的具体结构,达不到精确校验的目的。
内容的提问来源于stack exchange,提问作者Tiago Bértolo
相关产品推荐
相关产品推荐

