export declare class TypedEventTarget<T extends TypedEvent<string>[]> {
    private target;
    constructor(target?: EventTarget);
    addEventListener<K extends T[number]["type"]>(type: K, listener: (event: T[number] & {
        type: K;
    }) => void, options?: AddEventListenerOptions | boolean): void;
    removeEventListener<K extends T[number]["type"]>(type: K, listener: (event: T[number] & {
        type: K;
    }) => void, options?: EventListenerOptions | boolean): void;
    on<K extends T[number]["type"]>(type: K, listener: (event: T[number] & {
        type: K;
    }) => void, options?: AddEventListenerOptions | boolean): void;
    off<K extends T[number]["type"]>(type: K, listener: (event: T[number] & {
        type: K;
    }) => void, options?: EventListenerOptions | boolean): void;
    dispatchEvent(event: T[number]): boolean;
    protected emit<K extends T[number]["type"]>(type: K, detail?: (T[number] & {
        type: K;
    })["detail"]): boolean;
}
export type TypedEvent<Type extends string, Detail = unknown> = CustomEvent<Detail> & {
    readonly type: Type;
};
//# sourceMappingURL=events.d.ts.map