Spaces:
Running
Running
File size: 1,421 Bytes
352fb85 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
class EventDispatcher {
addEventListener: (type: string, listener: (event: Event) => void) => void;
removeEventListener: (type: string, listener: (event: Event) => void) => void;
hasEventListener: (type: string, listener: (event: Event) => void) => boolean;
dispatchEvent: (event: Event) => void;
constructor() {
const listeners = new Map<string, Set<(event: Event) => void>>();
this.addEventListener = (type: string, listener: (event: Event) => void) => {
if (!listeners.has(type)) {
listeners.set(type, new Set());
}
listeners.get(type)!.add(listener);
};
this.removeEventListener = (type: string, listener: (event: Event) => void) => {
if (!listeners.has(type)) {
return;
}
listeners.get(type)!.delete(listener);
};
this.hasEventListener = (type: string, listener: (event: Event) => void) => {
if (!listeners.has(type)) {
return false;
}
return listeners.get(type)!.has(listener);
};
this.dispatchEvent = (event: Event) => {
if (!listeners.has(event.type)) {
return;
}
for (const listener of listeners.get(event.type)!) {
listener(event);
}
};
}
}
export { EventDispatcher };
|