This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type Listener<T extends any[]> = (...args: T) => void; | |
export default class EventBus<EventMap extends Record<keyof EventMap, any[]>> { | |
private listeners: Partial<Record<keyof EventMap, Listener<EventMap[keyof EventMap]>[]>> = {}; | |
once<K extends keyof EventMap>(event: K, listener: Listener<EventMap[K]>): void { | |
const onceListener: Listener<EventMap[K]> = (...args: EventMap[K]) => { | |
listener(...args); | |
this.off(event, onceListener); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export default function oneOf(values) { | |
return function (value) { | |
return values.indexOf(value) !== -1; | |
}; | |
} |