typescript封装LocalStorage并支持过期时间
export enum Dictionaries {
expire = '__expire__',
permanent = 'permanent'
}
import { Dictionaries } from "../enum"
export type Key = string
export type expire = Dictionaries.permanent | number
export interface Data<T> {
value: T
[Dictionaries.expire]: Dictionaries.expire | number
}
export interface Result<T> {
message: string,
value: T | null
}
export interface StorageCls {
set: <T>(key: Key, value: T, expire: expire) => void
get: <T>(key: Key) => Result<T | null>
remove: (key: Key) => void
clear: () => void
}
import { StorageCls, Key, expire, Data,Result } from "./type";
import { Dictionaries } from "./enum";
export class Storage implements StorageCls {
public set<T = any>(key: Key, value: T, expire: expire = Dictionaries.permanent) {
const data = {
value,
[Dictionaries.expire]: expire
}
localStorage.setItem(key, JSON.stringify(data))
}
public get<T = any>(key: Key):Result<T | null> {
const value = localStorage.getItem(key)
if (value) {
const obj: Data<T> = JSON.parse(value)
const now = new Date().getTime()
if (typeof obj[Dictionaries.expire] == 'number' && obj[Dictionaries.expire] < now) {
this.remove(key)
return {
message:`您的${key}已过期`,
value:null
}
}else{
return {
message:"成功读取",
value:obj.value
}
}
} else {
console.warn('key值无效')
return {
message:`key值无效`,
value:null
}
}
}
public remove(key:Key) {
localStorage.removeItem(key)
}
public clear() {
localStorage.clear()
}
}
import ts from 'rollup-plugin-typescript2'
import path from 'path'
import {fileURLToPath} from 'url'
const metaUrl = fileURLToPath(import.meta.url)
const dirName = path.dirname(metaUrl)
export default {
input:'./src/index.ts',
output:{
file:path.resolve(dirName,'./dist/index.js')
},
plugins:[
ts()
]
}