/**
 * @import {ValueIsEvent, ITypedEventTarget, TypedEventListenerOrEventListenerObject} from './types.js'
 */
/**
 * @template {ValueIsEvent<M>} M
 * @implements {ITypedEventTarget<M>}
 */
export class TypedEventTarget<M extends ValueIsEvent<M>> extends EventTarget implements ITypedEventTarget {
    constructor();
    /**
     * Dispatches a synthetic event to target and returns true if either
     * event's cancelable attribute value is false or its preventDefault() method
     * was not invoked, and false otherwise.
     *
     * @template {keyof M} T
     * @param {T} _type
     * @param {M[T]} event
     * @returns {boolean}
     */
    dispatchTypedEvent<T extends keyof M>(_type: T, event: M[T]): boolean;
    emit<T extends keyof M>(...args: M[T]["detail"] extends import("iso-base/types").IsAny<M[T]["detail"]> ? [type: T, detail?: unknown] : [type: T, detail: M[T]["detail"]]): boolean;
    /**
     * @inheritdoc {ITypedEventTarget<M>['addEventListener']}
     * @template {keyof M & string} T
     * @param {T} type
     * @param {TypedEventListenerOrEventListenerObject<M, T> | null} callback
     * @param {boolean | AddEventListenerOptions} [options]
     */
    addEventListener<T extends keyof M & string>(type: T, callback: TypedEventListenerOrEventListenerObject<M, T> | null, options?: boolean | AddEventListenerOptions): void;
    /**
     * Alias for {@link TypedEventTarget.addEventListener}
     *
     * @template {keyof M & string} T
     * @param {T} type
     * @param {TypedEventListenerOrEventListenerObject<M, T> | null} callback
     * @param {boolean | AddEventListenerOptions} [options]
     */
    on<T extends keyof M & string>(type: T, callback: TypedEventListenerOrEventListenerObject<M, T> | null, options?: boolean | AddEventListenerOptions): void;
    /**
     * @inheritdoc {ITypedEventTarget<M>['removeEventListener']}
     * @template {keyof M & string} T
     * @param {T} type
     * @param {TypedEventListenerOrEventListenerObject<M, T> | null} callback
     * @param {boolean | EventListenerOptions} [options]
     */
    removeEventListener<T extends keyof M & string>(type: T, callback: TypedEventListenerOrEventListenerObject<M, T> | null, options?: boolean | EventListenerOptions): void;
    /**
     * Alias for {@link TypedEventTarget.removeEventListener}
     *
     * @template {keyof M & string} T
     * @param {T} type
     * @param {TypedEventListenerOrEventListenerObject<M, T> | null} callback
     * @param {boolean | EventListenerOptions} [options]
     */
    off<T extends keyof M & string>(type: T, callback: TypedEventListenerOrEventListenerObject<M, T> | null, options?: boolean | EventListenerOptions): void;
}
import type { ValueIsEvent } from './types.js';
import type { ITypedEventTarget } from './types.js';
import type { TypedEventListenerOrEventListenerObject } from './types.js';
//# sourceMappingURL=index.d.ts.map