type StringEventKey = Extract; type EventArgs = TEvents[TEventName] extends readonly [...infer A] ? [...A] : TEvents[TEventName] extends readonly any[] ? [...TEvents[TEventName]] : [TEvents[TEventName]]; export default class TypedEventEmitter> { private listeners; emit>(eventName: TEventName, ...eventArg: EventArgs): void; on>(eventName: TEventName, handler: (...eventArg: EventArgs) => void): void; removeListener>(eventName: TEventName, handler: (...eventArg: EventArgs) => void): void; } export {};