export type Listener = ((event: Event, target: EventEmitter) => any) & { [inheritedSym]?: boolean; }; export type Listeners = { [K in keyof Events]: Listener[]; }; export interface ListenerOption { inherited?: boolean; } export type Event = { type: K; } & Events[K]; declare const inheritedSym: unique symbol; export declare class EventEmitter> { listeners: Listeners; onceMapping: Map, Listener>; parentEmitter?: EventEmitter>; on: (eventType: K, listener: Listener, options?: ListenerOption) => this; off: (eventType: K, listener: Listener) => this; addListener(eventType: K, listener: Listener, options?: ListenerOption): this; removeListener(eventType: K, listener: Listener): this; listenerCount(event: keyof Events): number; emit(event: string | Event | K): any; protected _emit(event: Event | K, lstns: Listeners[K], onlyInherited?: boolean): any; once(eventType: K, listener: Listener, options?: ListenerOption): this; } export {};