/**
 * Event dispatcher.
 *
 * @param context Context object.
 */
export declare class Dispatcher<T> extends Object {
    /**
     * Event context.
     */
    protected readonly _context: any;
    /**
     * Event handlers.
     */
    protected readonly _handlers: Set<(event: T) => any>;
    constructor(context: any);
    /**
     * Add listener.
     *
     * @param handler Event handler.
     */
    on(handler: (event: T) => any): void;
    /**
     * Remove listener.
     *
     * @param handler Event handler.
     */
    off(handler: (event: T) => any): void;
    /**
     * Trigger, sync.
     *
     * @param event Event data.
     * @returns Handler count.
     */
    triggerSync(event: T): number;
    /**
     * Trigger, async.
     *
     * @param event Event data.
     * @returns Handler count.
     */
    triggerAsync(event: T): Promise<number>;
    /**
     * Trigger or throw, sync.
     *
     * @param event Event data.
     */
    triggerOrThrowSync(event: T): void;
    /**
     * Trigger or throw, sync.
     *
     * @param event Event data.
     * @returns Handler count.
     */
    triggerOrThrowAsync(event: T): Promise<void>;
}
