/** * Default data map. * Returns unknown data types for all event names. * Data types can be cast in the listener if no specific data map is provided. */ interface DefaultDataMap { [key: string]: unknown; } /** * Event listener that returns a specific * data object to the callback. */ export interface EventEmitterListener { (data: T): void; } /** * Enables event management on * other sub-classes. * * @example * * interface CustomEventData { * foo: string; * bar: number; * } * * interface OtherCustomEventData extends CustomEventData { * baz: number[]; * } * * interface EventDataMap { * 'custom-event': CustomEventData; * 'other-custom-event': OtherCustomEventData; * } * * class EmitterClass extends EventEmitter { * test (): void { * this.emit('custom-event', { * foo: 'hello earth', * bar: 1 * }); * this.emit('other-custom-event', { * foo: 'hello mars', * bar: 0.2, * baz: [1, 2, 3] * }); * } * } * * const ec = new EmitterClass(); * ec.on('custom-event', (data) => console.log(data.foo)); * ec.on('other-custom-event', (data) => console.log(data.baz)); * ec.test(); */ export declare class EventEmitter { /** * Collection of subscribed event handlers. */ private events; /** * Gets the event listeners for a specific event name. * @param name Name of the event * @returns Collection of active listeners */ private getEventListeners; /** * Emits an event * @param name Name of the event to emit * @param data Data that should be passed to the handlers. * @returns {void} */ protected emit(name: K, data: T[K]): void; /** * Subscribes to an event * @param name Name of the event to subscribe to * @param listener Event listener to use * @returns {void} */ on(name: K, listener: EventEmitterListener): this; /** * Unsubscribes from an event * @param name Name of the event to unsubscribe from * @param listener Original event listener to remove * @returns {void} */ off(name: K, listener: EventEmitterListener): boolean; } export {};