import { createJSONStorage, type PersistOptions } from './index' declare namespace WechatMiniprogram { interface Wx { getStorageSync( /** 本地缓存中指定的 key */ key: string ): T setStorageSync( /** 本地缓存中指定的 key */ key: string, /** 需要存储的内容。只支持原生类型、Date、及能够通过`JSON.stringify`序列化的对象。 */ data: T ): void removeStorageSync( /** 本地缓存中指定的 key */ key: string ): void } } declare const wx: WechatMiniprogram.Wx /** 通过 wx api 映射持久化工具 */ export const createMpStorage = ( name: string, options?: Partial> & { pick?: Array } ): PersistOptions => { const opts: PersistOptions = { name, storage: createJSONStorage(() => ({ getItem: async (name) => { return wx.getStorageSync(name) }, setItem: async (name, value) => { wx.setStorageSync(name, value) }, removeItem: async (name) => { wx.removeStorageSync(name) } })), ...options } // > 可选的持久化字段. if (options?.pick) { opts.partialize = (state) => { const serialization: Partial = {} for (const key of options.pick ?? []) { serialization[key] = state[key] } return serialization as S } opts.migrate = (persistedState: unknown, version: number) => { if (version !== opts.version) { return {} as S } return persistedState as S } } return opts }