/** * 存储到localStorage * * ```ts * import { saveToLocal, loadFromStorage } from 'sunny-js' * saveToLocal({ key1: 'value1' }) * console.log(loadFromStorage('key1')) * // => 'value1' * * // 存储时,碰到对象类型的值,尝试合并对象后再存储 * saveToLocal({ key2: { childKey1: 'childValue1' } }) * saveToLocal({ key2: { childKey2: 'childValue2' } }, true) * console.log(loadFromStorage('key2')) * // => {childKey1: 'childValue1', childKey2: 'childValue2'} * ``` * * @see 和 {@link saveToSession} 用法一致 * @see 存储后的数据可以通过 {@link loadFromStorage} 读取 * @see 会调用{@link saveTo}来实现功能 * @param data 数据对象。key将作为数据存储的键名。 * @param shouldMerge 是否合并数据 * @category 数据存取 */ export declare function saveToLocal(data: Record, shouldMerge?: SaveToOptions['shouldMerge'] | SaveToOptions): void; /** * 存储到sessionStorage * @see 和 {@link saveToLocal} 用法一致 * @see 存储后的数据可以通过 {@link loadFromStorage} 读取 * @see 会调用{@link saveTo}来实现功能 * @param data 数据对象。key将作为数据存储的键名。 * @param shouldMerge 是否合并数据 * @category 数据存取 */ export declare function saveToSession(data: Record, shouldMerge?: SaveToOptions['shouldMerge'] | SaveToOptions): void; interface SaveToOptions { /** * @default false */ shouldMerge?: boolean; /** * @default JSON.stringify */ jsonStringify?: (...args: Parameters) => ReturnType; } /** * 使用存储对象存储数据 * * ```ts * import { saveTo, loadFromStorage } from 'sunny-js' * saveTo(sessionStorage, { key1: 'value1' }) * console.log(loadFromStorage('key1')) * // => 'value1' * * // 存储时,碰到对象类型的值,尝试合并对象后再存储 * saveTo(localStorage, { key2: { childKey1: 'childValue1' } }) * saveTo(localStorage, { key2: { childKey2: 'childValue2' } }, true) * console.log(loadFromStorage('key2')) * // => {childKey1: 'childValue1', childKey2: 'childValue2'} * ``` * * @see {@link saveToLocal} * @see {@link saveToSession} * @see 存储后的数据可以通过 {@link loadFromStorage} 读取 * @param storage localStorage、sessionStorage、或实现了{@link https://developer.mozilla.org/zh-CN/docs/Web/API/Storage Storage API}的对象 * @param data 数据对象。key将作为数据存储的键名。 * @param shouldMerge 是否合并数据。会使用{@link merge}合并数据。 * @category 数据存取 */ export declare function saveTo(storage: Storage, data: Record, shouldMerge?: SaveToOptions['shouldMerge'] | SaveToOptions): void; interface LoadFromStorageOptions { /** * @default JSON.parse */ jsonParse?: (...args: Parameters) => ReturnType; } /** * 从Storage中读取数据。会先尝试从sessionStorage,然后从localStorage,调用它们的getItem方法读数据,并默认会用 * JSON.parse解析值并返回 * @see {@link saveTo} * @see {@link saveToLocal} * @see {@link saveToSession} * @param key 数据键名 * @param jsonParse * @category 数据存取 */ export declare function loadFromStorage(key: string, { jsonParse }?: LoadFromStorageOptions): T | undefined; /** * 监听Storage数据变动事件 * * ```ts * import { onStorageChange } from 'sunny-js' * // 监听storage中dataKey的值变动事件 * const _removeEventListener = onStorageChange('dataKey', (result: string) => * console.log(result) * ) * // 注销事件监听 * _removeEventListener() * * // 自定义对比函数 * onStorageChange( * 'dataKey', * (result: { key1: number }) => console.log(result), * (oldValue, newValue) => oldValue.key1 === newValue.key1 * ) * ``` * * @param key 关心的数据键名 * @param callback 数据产生更新后,被调用的回调函数 * @param isEqual 如果新旧值相同返回true,如果不相同返回false表示数据更新了,将会调用callback。默认对比逻辑是`Object.is` * @returns 返回注销事件监听函数 * @category 数据存取 */ export declare function onStorageChange(key: string, callback: (result: TValue) => void, isEqual?: (oldValue: TValue, newValue: TValue) => boolean): () => void; export {};