export declare type EventHandler<E> = (event: E) => void;
/**
 * Событие, на которое можно подписаться.
 */
export interface Event<E> {
    /**
     * Ригистрирует новый обработчик у диспетчера. Каждый раз,
     * когда событие отправляется, обработчик получает уведомление.
     * @param handler Обработчик для регистрации.
     */
    register(caller: any, handler: EventHandler<E>): void;
    /**
     * Отписать обработчик от диспетчера.
     * @param handler Обработчик для удаления.
     */
    unregister(caller: any, handler: EventHandler<E>): void;
}
/**
 * Диспетчер, который может передавать события подписчикам.
 */
export declare class EventDispatcher<E> implements Event<E> {
    /**
     * Обработчики, которые хотят получать уведомления о возникновении события.
     */
    private _handlers;
    /**
     * Конструктор
     */
    constructor();
    /**
     * Ригистрирует новый обработчик у диспетчера. Каждый раз,
     * когда событие отправляется, обработчик получает уведомление.
     * @param handler Обработчик для регистрации.
     */
    register(caller: any, handler: EventHandler<E>): void;
    /**
     * Отписать обработчик от диспетчера.
     * @param handler Обработчик для удаления.
     */
    unregister(caller: any, handler: EventHandler<E>): void;
    /**
     * Рассылает событие всем подписчикам.
     * @param event Данные о произошедшем событии.
     */
    dispatch(event: E): void;
}
