/**
 * Utility abstract class for creating multiple event listeners
 *
 * @exports
 * @class EventManager
 * @abstract
 * @template {Function} EventListener
 */
export declare abstract class EventManager<EventListener extends (...args: any[]) => void> {
    /**
     * Array of listeners bound to this manager event
     */
    protected listeners: EventListener[];
    /**
     * Add a listener to this manager listeners
     *
     * @param {EventListener} listener The listener to add
       * @returns {Function} The `off` function to remove the listener
     */
    on(listener: EventListener): () => void;
    /**
     * Remove a listener from this manager listeners
     *
     * @param {EventListener} listener The listener to remove
     */
    off(listener: EventListener): void;
    /**
       * Trigger this manager listeners
       *
       * @param {any[]} args The arguments to pass to the listeners
       */
    emit(...args: Parameters<EventListener>): void;
    /**
     * Bind event listeners
     */
    protected bind?(): void;
    /**
     * Unbind event listeners
     */
    protected unbind?(): void;
}
/**
 * Utility abstract class for creating multiple events listeners
 *
 * @exports
 * @class EventsManager
 * @abstract
 * @template {string} EventKey
 * @template {Function} EventListener
 */
export declare abstract class EventsManager<EventKey extends string, EventListener extends (...args: any[]) => void> {
    /**
     * Arrays of listeners bound to this manager events
     */
    protected listeners: {
        [key in EventKey]?: EventListener[];
    };
    /**
     * Add a listener to this manager listeners
     *
     * @param {EventKey} eventKey The event key to add the listener to
       * @param {EventListener} listener The listener to add
       * @returns {Function} The `off` function to remove the listener
     */
    on(eventKey: EventKey, listener: EventListener): () => void;
    /**
     * Remove a listener gtom this manager listeners
     *
     * @param {EventKey} eventKey The event key to remove the listener from
       * @param {EventListener} listener The listener to remove
     */
    off(eventKey: EventKey, listener: EventListener): void;
    /**
       * Trigger this manager listeners
       *
       * @param {EventKey} eventKey The event key to remove the listener from
       * @param {any[]} args The arguments to pass to the listeners
       */
    emit(eventKey: EventKey, ...args: Parameters<EventListener>): void;
    /**
     * Bind events listeners
     */
    protected bind?(eventKey: EventKey): void;
    /**
     * Unbind events listeners
     */
    protected unbind?(eventKey: EventKey): void;
}
