使用ts二次封装storage(sessionStorage/localStorage)

复制代码
export class LocalCache {
  setCache<T = any>(key: string, value: T): boolean;
  setCache<T = any>(
    key: string,
    value: T,
    localOrSessionStorage: boolean
  ): boolean;
  /**
   * 设置缓存
   * @param key
   * @param value
   * @param localOrSessionStorage true => localStorage 默认就是true  如果需要使用sessionStorage 需要传递该参数 false
   * @returns
   */
  setCache<T = any>(
    key: string,
    value: T,
    localOrSessionStorage = true
  ): boolean {
    try {
      const val = JSON.stringify(value);
      if (localOrSessionStorage) {
        window.localStorage.setItem(key, val);
      } else {
        window.sessionStorage.setItem(key, val);
      }
    } catch (error) {
      return false;
    }
    return true;
  }

  getCache<T = any>(key: string): T;
  getCache<T = any>(key: string, localOrSessionStorage: boolean): T;
  /**
   *
   * @param key 获取缓存
   * @param localOrSessionStorage
   * @returns
   */
  getCache<T>(key: string, localOrSessionStorage = true): T {
    let res: any;
    if (localOrSessionStorage) {
      const val = window.localStorage.getItem(key);
      if (val) {
        res = JSON.parse(val);
      }
    }
    const val = window.sessionStorage.getItem(key);
    if (val) {
      res = JSON.parse(val);
    }
    return res as T;
  }
  deleteCache(key: string): void;
  deleteCache(key: string, localOrSessionStorage: boolean): void;
  deleteCache(key: string, localOrSessionStorage = true): void {
    if (localOrSessionStorage) window.localStorage.removeItem(key);
    else window.sessionStorage.removeItem(key);
  }
  clearCache(): void;
  clearCache(localOrSessionStorage: boolean): void;
  clearCache(localOrSessionStorage = true): void {
    if (localOrSessionStorage) window.localStorage.clear();
    else window.sessionStorage.clear();
  }
}

// 缓存对象
export default new LocalCache();
复制代码

 

来源 :

使用ts二次封装storage(sessionStorage/localStorage)_尤雨东的博客-CSDN博客_ts storage

 

posted @   小杨观世界  阅读(350)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示