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

为JSON.stringify的value参数定义更严格的可序列化类型

可序列化值的TypeScript类型定义

要定义满足deepEqual(value, JSON.parse(JSON.stringify(value)))的类型,我们需要排除那些经过JSON序列化/反序列化后会改变或丢失的类型(比如Date序列化后变成ISO字符串,反序列化后不再是Date对象),同时只保留JSON原生支持且能完整还原的结构:

// 定义无法正确序列化还原的类型集合
type NonSerializable = Date | RegExp | Map<any, any> | Set<any> | Function | Symbol;

// 基础可序列化原始类型
type SerializablePrimitive = string | number | boolean | null;

// 可序列化对象:仅包含字符串键和可序列化值的普通对象
type SerializableObject = { [key: string]: SerializableValue };

// 可序列化数组:元素均为可序列化值
type SerializableArray = Array<SerializableValue>;

// 最终的可序列化值类型
type SerializableValue = Exclude<SerializablePrimitive | SerializableObject | SerializableArray, NonSerializable>;

说明

  • 这个类型会排除所有JSON处理后无法还原为原值的类型,确保序列化再反序列化后与原值深度相等。
  • 静态类型无法检测循环引用,这类情况仍需在运行时处理,因为JSON.stringify遇到循环引用会直接抛出错误。
  • 普通对象、数组以及JSON原生支持的原始类型都能被正确包含,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:52:33