import * as rxjs from './smartrx.plugins.rxjs.js';
export interface IEventEmitter<T = any> {
    on: (eventNameArg: string, eventHandlerArg: (eventPayload: T) => any) => void;
}
/**
 * bundles an observable with an emitter
 */
export interface IObservableEventBundle<T> {
    subject: rxjs.Subject<any>;
    eventRef: T;
    event: string;
}
/**
 * manages observables by making sure that only one observable is regsitered per event
 */
export declare class Observablemap {
    observableEventEmitterBundleArray: IObservableEventBundle<IEventEmitter<unknown>>[];
    observableEventTargetBundleArray: IObservableEventBundle<EventTarget>[];
    /**
     * creates a hot subject if not yet registered for the event.
     * In case event has been registered before the same observable is returned.
     */
    getSubjectForEmitterEvent<T>(emitterArg: IEventEmitter<T>, eventArg: string): rxjs.Subject<T>;
    getSubjectForEventTarget<T>(eventTargetArg: EventTarget, eventNameArg: string): rxjs.Subject<T>;
}
