import type { Disposable } from './disposable'; export declare type EventListener = (event: Event) => void | Promise; export declare class Event { readonly type: string; readonly detail: T; constructor(name: string, detail: T); } export declare type EventsOf> = T extends EventEmitter ? never extends E ? T['__type_helper_'] : E : never; export interface EventSource { addEventListener(event: E, listener: EventListener): void; removeEventListener(event: E, listener: EventListener): void; __type_helper_?: T; } export interface EventProducer { dispatchEvent(event: E, detail: T[E]): void; } export declare class EventEmitter implements Disposable, EventSource, EventProducer { private _listeners; __type_helper_?: T; addEventListener(event: E, listener: EventListener): void; removeEventListener(event: E, listener: EventListener): void; dispatchEvent(event: E, detail: T[E]): void; dispose(): void; } //# sourceMappingURL=emitter.d.ts.map