UNPKG

@tf2pickup-org/mumble-client

Version:
15 lines (14 loc) 1.1 kB
import { EventEmitter } from 'node:events'; type EventsMap = Record<string, (...args: any[]) => void>; type EventNames<Map extends EventsMap> = keyof Map & (string | symbol); export type EventParams<Map extends EventsMap, Ev extends EventNames<Map>> = Parameters<Map[Ev]>; export interface TypedEventBroadcaster<EmitEvents extends EventsMap> { emit<Ev extends EventNames<EmitEvents>>(ev: Ev, ...args: EventParams<EmitEvents, Ev>): boolean; } export declare abstract class TypedEventEmitter<ListenEvents extends EventsMap, EmitEvents extends EventsMap> extends EventEmitter implements TypedEventBroadcaster<EmitEvents> { on<EventName extends EventNames<ListenEvents>>(eventName: EventName, listener: ListenEvents[EventName]): this; once<EventName extends EventNames<ListenEvents>>(eventName: EventName, listener: ListenEvents[EventName]): this; emit<EventName extends EventNames<EmitEvents>>(eventName: EventName, ...args: EventParams<EmitEvents, EventName>): boolean; listeners<EventName extends EventNames<ListenEvents>>(event: EventName): ListenEvents[EventName][]; } export {};