import { Observable as ObservableType } from 'rxjs';
export type ALL = '__ALL__';
export declare class Emitter<Messages extends object> {
    private isDevMode;
    private state;
    constructor(isDevMode?: boolean);
    /**
     * Emit an event (silently fails if no listeners are hooked up yet)
     */
    emit<K extends keyof Messages>(key: K, value: Messages[K]): this;
    /**
     * Subscribe to an event
     */
    on<K extends keyof Messages>(key: K): ObservableType<Messages[K]>;
    /**
     * Subscribe to all events
     */
    all(): ObservableType<Messages[keyof Messages]>;
    private createChannel;
    private deleteChannel;
    private emitOnChannel;
    private hasChannel;
}
