export declare const TypedEventTarget: {
    new <EventMap>(): {
        addEventListener<K extends keyof EventMap>(type: K, listener: (this: HTMLElement, ev: EventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
        addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void;
        dispatchEvent(event: EventMap[keyof EventMap]): boolean;
        dispatchEvent(event: Event): boolean;
        removeEventListener<K extends keyof EventMap>(type: K, listener: (this: HTMLElement, ev: EventMap[K]) => any, options?: boolean | EventListenerOptions): void;
        removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void;
    };
};
export interface TypedEventTarget<EventMap> {
    addEventListener<K extends keyof EventMap>(type: K, listener: (this: HTMLElement, ev: EventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void;
    dispatchEvent(event: EventMap[keyof EventMap]): boolean;
    dispatchEvent(event: Event): boolean;
    removeEventListener<K extends keyof EventMap>(type: K, listener: (this: HTMLElement, ev: EventMap[K]) => any, options?: boolean | EventListenerOptions): void;
    removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void;
}
export declare class SubscriptionEventTarget<EventMap> extends TypedEventTarget<EventMap> {
    subscribe<K extends keyof EventMap>(type: K, listener: (ev: EventMap[K]) => void): () => void;
}
