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

TypeScript中如何定义可被JSON.stringify处理的类型?

处理JSON可序列化值的TypeScript类型定义

完全不用any,你可以自己定义一个覆盖所有JSON可序列化值的类型,比any更安全,还能在编译阶段帮你排查JSON.stringify处理不了的参数。

JSON能正确序列化的类型范围很明确:

  • 原始类型:string、number、boolean、null(undefined、Symbol、函数会被忽略或序列化失败)
  • 由上述原始类型组成的数组
  • 键为字符串、值为上述类型的对象

基于这个规则,可以写出对应的TypeScript类型:

// JSON支持的原始类型
type JsonPrimitive = string | number | boolean | null;
// 递归定义合法的JSON值:原始类型、对象或数组
type JsonValue = JsonPrimitive | JsonObject | JsonArray;
// JSON对象:键是string,值为合法JSON值
interface JsonObject {
  [key: string]: JsonValue;
}
// JSON数组:元素为合法JSON值
interface JsonArray extends Array<JsonValue> {}

之后直接把这个类型用在函数参数里就行:

function serializeValue(value: JsonValue) {
  return JSON.stringify(value);
}

这样做的好处是,如果你传入函数、undefined或者Symbol这类JSON处理不了的值,TypeScript会在编译阶段直接报错,避免运行时的意外问题。

需要注意的是,这个类型没法检测循环引用的情况——循环引用属于运行时问题,静态类型检查没法提前发现,但已经能覆盖绝大多数合法的JSON可序列化场景了。

内容的提问来源于stack exchange,提问作者Antrikshy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:42:02