Ts定义封装一个有过期时间的localStorage工具函数

  1. 定义类型限制用户的输入
  2. 判断用户是否传入时间,如果传入了时间,进行格式处理,处理成时间戳,比较时间戳即可,如果没有传入时间直接存放即可。
type TDate = 'h' | 'w'| 'd' | 'm' |'s'
type TExpire = `${number}${TDate}`;
interface IStorage{
    value: any,
    key: string,
    expire?:TExpire
}
const storageUtil = {
    set(data: IStorage) {

        if (data.expire) {
            const date = {expire:0}
            data?.expire && this.processExpire(data.expire,date)
            localStorage.setItem(data.key, JSON.stringify({ expire: date.expire, value: data.value }))
        } else {
            localStorage.setItem(data.key, JSON.stringify(data.value))
        }

    },
    get(key: string) {
        let res = localStorage.getItem(key) as any
        res && (res = JSON.parse(res))

        console.log(res?.expire,new Date().getTime());
        
        if (res?.expire && res.expire < new Date().getTime()) {
            localStorage.removeItem(key)
            res = null
        }
        return res
    },
    delete(key: string) {
        localStorage.removeItem(key)
    },
    processExpire(expire: TExpire, date: { expire: number }) {
        const time = expire.match(/\d/)![0],
            timerUnit: TDate = expire.split(time)[1].toLocaleLowerCase() as TDate
        switch (timerUnit) {
            case 's':
                date.expire = Number(time) * 1000
                break
            case 'm':
                date.expire = Number(time) * 1000 * 60
                break
            case 'h':
                date.expire = Number(time) * 1000 * 60 * 60
                break
            case 'd':
                date.expire = Number(time) * 1000 * 60 * 60 * 24
                break
            case 'w':
                date.expire = Number(time) * 1000 * 60 * 60 * 24 * 7
                break

        }
        date.expire += new Date().getTime()
    }
}
export default () => {
    return storageUtil
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鲤余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值