createStorageHandler
package version >0.2.0
shadcn any version
author: cmtlyt
update time: 2026/04/01 16:07:21
createStorageHandler 是一个类型安全的存储处理器工具,支持 localStorage、sessionStorage 和内存存储。提供完整的 TypeScript 类型推断、自动保存、降级处理等功能,适用于配置管理、状态持久化、数据缓存等场景。
特性
- 类型安全:完整的 TypeScript 类型支持和推断
- 多种存储类型:支持 localStorage、sessionStorage 和内存存储
- 自动保存:支持自动保存间隔配置
- 降级处理:当 localStorage/sessionStorage 不可用时自动降级到内存存储
- 简洁 API:提供 get、set、clear 三个核心方法
- 清除保护:清除后再次访问会抛出错误,避免误操作
install
npm
shadcn
usage
基础用法
localStorage 存储
sessionStorage 存储
内存存储
高级特性
自动保存间隔
类型推断
清除保护
使用场景
用户配置持久化
表单数据暂存
购物车数据缓存
应用状态管理
多标签页同步
API
createStorageHandler(storageKey, initialData?, options?)
创建一个类型安全的存储处理器。
参数
- storageKey:
string- 存储键名,用于在存储中标识数据
- initialData?:
T- 初始数据,当存储中没有数据时使用
- options?:
Partial<CreateStorageOptions>- storageType?:
'local' | 'session' | 'memory'- 存储类型,默认为
'local' 'local': 使用 localStorage'session': 使用 sessionStorage'memory': 使用内存存储
- 存储类型,默认为
- autoSaveInterval?:
number- 自动保存间隔(毫秒),默认为
0(立即保存) - 设置为大于 0 的值时,会在指定间隔后保存
- 自动保存间隔(毫秒),默认为
- storageType?:
返回值
- 返回值:
StorageHandler<T>- get:
<K>(key?: K) => string extends K ? T : T[K]- 获取存储的数据
- 不传参数时返回整个数据对象
- 传入 key 时返回对应属性的值
- set:
<K>(value: string extends K ? T : T[K], key?: K) => void- 设置存储的数据
- 不传 key 时设置整个数据对象
- 传入 key 时设置对应属性的值
- clear:
() => void- 清除存储数据
- get:
类型定义
最佳实践
1. 定义明确的接口类型
2. 使用有意义的 storageKey
3. 合理使用 autoSaveInterval
4. 选择合适的存储类型
5. 处理清除后的访问
6. 使用默认值
注意事项
- storageKey 必须是字符串:storageKey 参数必须是有效的字符串
- 数据序列化:数据会被序列化为 JSON 字符串存储,不支持函数、Symbol 等特殊类型
- 存储大小限制:localStorage 和 sessionStorage 有大小限制(通常为 5MB)
- 隐私模式:在浏览器的隐私模式下,localStorage 可能不可用,会自动降级到内存存储
- 跨域限制:localStorage 和 sessionStorage 遵循同源策略,不能跨域访问
- 清除后不可恢复:调用 clear() 后,数据会被永久删除,无法恢复
- 类型安全:TypeScript 类型在运行时不会进行验证,需要开发者确保类型正确
- 自动保存延迟:使用 autoSaveInterval 时,在延迟期间如果页面关闭,数据可能不会保存
- 内存存储不持久:使用内存存储时,数据只存在于当前页面生命周期,刷新页面会丢失
- 并发访问:多标签页同时访问同一存储时,需要通过 storage 事件进行同步