/** * Define storage data type */ interface StorageData { // locale locale: Locale; // appearance appearance: Appearance; // local setting localSetting: LocalSetting; } type StorageKey = keyof StorageData; const storage = { get: (keys: StorageKey[]): Partial => { const data: Partial = {}; for (const key of keys) { try { const stringifyValue = localStorage.getItem(key); if (stringifyValue !== null) { const val = JSON.parse(stringifyValue); data[key] = val; } } catch (error: any) { console.error("Get storage failed in ", key, error); } } return data; }, set: (data: Partial) => { for (const key in data) { try { const stringifyValue = JSON.stringify(data[key as StorageKey]); localStorage.setItem(key, stringifyValue); } catch (error: any) { console.error("Save storage failed in ", key, error); } } }, remove: (keys: StorageKey[]) => { for (const key of keys) { try { localStorage.removeItem(key); } catch (error: any) { console.error("Remove storage failed in ", key, error); } } }, }; export default storage;