export type StorageEventListener = (event: T) => void; export class StorageEvent { listeners = new Set>(); get length(): number { return this.listeners.size; } dispatch(message: TMessage): void { this.listeners.forEach(callback => callback(message)); } addListener(listener: StorageEventListener): void { this.listeners.add(listener); } removeListener(listener: StorageEventListener): void { this.listeners.delete(listener); } }