export type EventMap = {
    [eventName: string]: Event<string>;
};
export type Event<T extends string> = {
    type: T;
};
export type Listener<E extends Event<any>> = (e: E) => void;
export declare class EventEmitter<Events extends EventMap> {
    private readonly eventListener;
    constructor();
    addEventListener<EventName extends keyof Events>(eventName: EventName, listener: Listener<Events[EventName]>): this;
    removeEventListener<EventName extends keyof Events>(eventName: EventName, listener: Listener<Events[EventName]>): void;
    trigger<EventName extends keyof Events>(eventName: EventName, e: Omit<Events[EventName], 'type'> & {
        type?: EventName;
    }): void;
}
