SuperJSON 序列化助手
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/tx20268316 技能。
技能介绍
要解决的问题
当你把带日期的筛选条件存进 localStorage,或通过 Worker.postMessage 传递复杂对象时,标准 JSON.stringify 会把 Date 变成字符串、把 Set 变成普通数组。下次读取时,instanceof Date 直接返回 false,前端可能因类型错误触发异常;在 Next.js 等 SSR 场景中,脱水后的数据水合时同样会丢失原始类型,导致客户端和服务端渲染结果不一致。
核心能力与使用步骤
该技能基于 superjson 解决JSON 类型失真问题:
- 类型完整保留:序列化
Date、Map、Set等复杂类型,还原后仍为原实例,可通过instanceof自测验证。 - 无缝替换:API 设计近似
JSON.stringify/JSON.parse,只需将缓存写入、跨线程传参处的原生方法替换为SuperJSON.stringify/SuperJSON.parse。 - 自测验证:重点测试
Date、Set等类型的往返结果,确保类型未被破坏。 - 标准 JSON 对接:若后端接口只接收标准 JSON,需单独编写 DTO 映射层,先将
Date转为 ISO 字符串再传输,避免直接传递元数据。
适用边界与注意事项
- 安全红线:切勿将密钥、Token 等敏感信息明文塞进序列化结果,防止通过导出数据泄露。
- 存储限制:超大对象仍受
localStorage等存储配额约束,需提前评估体积。 - 数据裁剪:循环引用的大图或组件实例(如 Vue/React 组件)需先处理循环引用,否则序列化会报错。
- 规范差异:与 YAML/XML 互转工具不同,本技能专注于解决 JSON 本身的类型问题,而非格式转换。
使用场景
- 前端需要在 localStorage 中缓存带日期范围的筛选条件,并在刷新后恢复为 Date 实例
- Web Worker 通过 postMessage 向主线程传递 Set 或 Map 结构的复杂数据
- Next.js 服务端渲染时需要对含 Date 的组件状态进行脱水与客户端水合
- 后端接口仅支持标准 JSON,前端需将 SuperJSON 还原出的 Date 转 ISO 后提交
适合人员
- 做 localStorage 状态持久化的前端工程师,需要保留筛选条件的 Date 类型
- 实现 Web Worker 通信的开发者,要在线程间传递复杂对象而不丢失类型
- 使用 Next.js 的全栈工程师,关注服务端脱水与客户端水合的类型一致性
- 对接严格 JSON 接口的开发者,需要制定 DTO 映射与类型转换方案