/** * 配置 * * @format */ interface Options { /** key前缀 */ prefix?: string; } /** 默认配置 */ const defaultOptions: Options = { prefix: "", }; class CookieStorage { private prefix: string; constructor(options: Options = defaultOptions) { const {prefix} = options; this.prefix = prefix ?? ""; } /** * @description: 设置cookie * @param {string} key 键 * @param {any} value 值 * @param {number} expires 过期时间s毫秒,不传默认2年有效 * @Date: 2023-05-17 18:10:34 * @Author: mulingyuer */ public setItem(key: string, value: string | number, expires?: number): void { const timestamp = Date.now(); if (typeof expires === "number") { expires = timestamp + expires; } else { expires = timestamp + 2 * 365 * 24 * 60 * 60 * 1000; } document.cookie = `${this.prefix}${key}=${value};expires=${new Date(expires).toUTCString()}`; } /** * @description: 获取cookie * @param {string} key 键 * @Date: 2023-05-17 18:31:50 * @Author: mulingyuer */ public getItem(key: string): string | undefined { const cookies = document.cookie.split("; "); let val: string | undefined = undefined; cookies.find((item) => { const [k, v] = item.split("="); if (k === `${this.prefix}${key}`) { val = v; return true; } return false; }); return val; } /** * @description: 删除指定key的cookie * @param {string} key 键 * @Date: 2023-05-17 18:32:56 * @Author: mulingyuer */ public removeItem(key: string): void { this.setItem(key, "", -1); } /** * @description: 清空所有cookie * @Date: 2023-05-17 23:13:04 * @Author: mulingyuer */ public clear(): void { const cookies = document.cookie.split("; "); cookies.forEach((item) => { const [k] = item.split("="); this.removeItem(k); }); } } const cookieStorage = new CookieStorage(); export {cookieStorage};