import { Type } from '@nestjs/common';
import { ModuleRef } from '@nestjs/core';
import { IEvent, IEventHandler } from '../interfaces';
export type EventHandlerType = Type<IEventHandler<IEvent>>;
export declare class EventBus<EventBase extends IEvent = IEvent> {
    private readonly moduleRef;
    private readonly logger;
    private readonly handlers;
    constructor(moduleRef: ModuleRef);
    execute<T extends EventBase, R = any>(event: T): Promise<R[]>;
    bind<T extends EventBase>(handler: IEventHandler<T>, id: string): void;
    register(handlers?: EventHandlerType[]): void;
    protected registerHandler(handler: EventHandlerType): void;
    private getEventId;
    private reflectEventId;
}
