typescript封装LocalStorage并支持过期时间
interface StorageItem<T> {
value: T;
expireAt: number;
}
class LocalStorageHelper<T> {
private readonly storageKey: string;
constructor(key: string) {
this.storageKey = key;
}
set(value: T, ttlMs?: number) {
const now = new Date().getTime();
const expireAt = ttlMs ? now + ttlMs : undefined;
const storageItem: StorageItem<T> = { value, expireAt };
localStorage.setItem(this.storageKey, JSON.stringify(storageItem));
}
get(): T | null {
const itemJson = localStorage.getItem(this.storageKey);
if (!itemJson) {
return null;
}
const item: StorageItem<T> = JSON.parse(itemJson);
const now = new Date().getTime();
if (item.expireAt && now > item.expireAt) {
this.remove();
return null;
}
return item.value;
}
remove() {
localStorage.removeItem(this.storageKey);
}
clearExpired() {
const itemJson = localStorage.getItem(this.storageKey);
if (itemJson) {
const item: StorageItem<T> = JSON.parse(itemJson);
const now = new Date().getTime();
if (item.expireAt && now > item.expireAt) {
this.remove();
}
}
}
}
// 使用示例
const storage = new LocalStorageHelper<string>('myKey');
storage.set('myValue', 1000 * 60); // 设置值和1分钟的过期时间
const value = storage.get(); // 获取值
if (value === null) {
console.log('值已过期');
} else {
console.log('获取到的值:', value);
}
storage.remove(); // 移除存储的值
这段代码定义了一个泛型类LocalStorageHelper
,它封装了对localStorage的操作,并且支持为存储的数据设置过期时间。set
方法接受一个值和一个可选的过期时间(以毫秒为单位),然后将其存储在localStorage中。get
方法检查项是否已过期,如果已过期,则移除该项并返回null
。remove
方法用于直接从localStorage中删除键。clearExpired
方法用于清除所有过期的项,但通常在获取值时会自动检查和清除过期项。
评论已关闭