export interface BaseObserverInterface { registerListener(listener: Partial): () => void; } export type BaseListener = { [key: string]: (...event: any) => any; }; export class BaseObserver implements BaseObserverInterface { protected listeners: Set>; constructor() { this.listeners = new Set(); } registerListener(listener: Partial): () => void { this.listeners.add(listener); return () => { this.listeners.delete(listener); }; } iterateListeners(cb: (listener: Partial) => any) { for (const listener of this.listeners) { cb(listener); } } }