type BBStorageResult = string | null; abstract class BBStorage { abstract getItem(key: string): Promise; abstract setItem(key: string, value: string): Promise; } class BBSessionStorage extends BBStorage { constructor() { super(); } getItem(key: string): Promise { return new Promise((resolve, reject) => { resolve(sessionStorage.getItem(key)); }); } setItem(key: string, value: string): Promise { return new Promise((resolve, reject) => { sessionStorage.setItem(key, value); resolve(); }); } } class BBLocalStorage extends BBStorage { constructor() { super(); } getItem(key: string): Promise { return new Promise((resolve, reject) => { resolve(localStorage.getItem(key)); }); } setItem(key: string, value: string): Promise { return new Promise((resolve, reject) => { localStorage.setItem(key, value); resolve(); }); } } export const StorageUtils = { sessionStorage: new BBSessionStorage(), localStorage: new BBLocalStorage(), };