type SubscriptionParams<T = any> = {
    params: T;
    event: string | number;
};
type Subscription<T> = ({ params, event }: SubscriptionParams<T>) => void;
declare class EventEmitter<T> {
    private subscriptions;
    private emitEffectCache;
    constructor();
    /**
     * Subscribe to the event
     * @param event string
     * @param listener Subscription<T>
     */
    useSubscription: (event: string, listener?: Subscription<T>) => void;
    /**
     * Send an event notification
     * @param event string | number
     * @param args T extends any[] ? any[] : any
     */
    emit: (event: string | number, ...args: T extends any[] ? any[] : any) => void;
    emitEffect: (event: string | number) => void;
    removeListener: (event: string) => void;
    clear: () => void;
}
declare const eventEmitterOverall: EventEmitter<unknown>;
export { EventEmitter, eventEmitterOverall };
