You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:32:01