linkup-bot-lib
Version:
40 lines (35 loc) • 969 B
text/typescript
import {EventEmitter} from "stream";
/**
* This class is used for TypeSafe events.
* @internal
*/
export class TypedEventEmitter<TEvents extends Record<string, any>> {
private emitter = new EventEmitter()
/**
* @internal
*/
emit<TEventName extends keyof TEvents & string>(
eventName: TEventName,
...eventArg: TEvents[TEventName]
) {
this.emitter.emit(eventName, ...(eventArg as []))
}
/**
* @internal
*/
on<TEventName extends keyof TEvents & string>(
eventName: TEventName,
handler: (...eventArg: TEvents[TEventName]) => void
) {
this.emitter.on(eventName, handler as any)
}
/**
* @internal
*/
off<TEventName extends keyof TEvents & string>(
eventName: TEventName,
handler: (...eventArg: TEvents[TEventName]) => void
) {
this.emitter.off(eventName, handler as any)
}
}