import EventEmitter from './EventEmitter';
type AsArray<P> = P extends unknown[] ? P : [P];
export type EventHandlerFunction<P = []> = (...parameters: AsArray<P>) => void;
export type EventListenerRemover = () => void;
export type EventListenFunction<TParameters = []> = (eventEmitter: EventEmitter, handler: EventHandlerFunction<TParameters>) => EventListenerRemover;
export type EventEmitFunction<TParameters = []> = (eventEmitter: EventEmitter, ...parameters: AsArray<TParameters>) => void;
export type EventListenerHook<TParameters = []> = (eventEmitter: EventEmitter | null | undefined, handler: EventHandlerFunction<TParameters>) => void;
/**
 * Listen for an event
 * @param eventEmitter The event emitter to listen to
 * @param event The event to listen for
 * @param handler The handler to call when the event is emitted
 * @returns A function to stop listening for the event
 */
export declare function listenForEvent<TParameters = []>(eventEmitter: EventEmitter, event: string, handler: EventHandlerFunction<TParameters>): EventListenerRemover;
export declare function makeListenFunction<TParameters = []>(event: string): EventListenFunction<TParameters>;
export declare function makeEmitFunction<TParameters = []>(event: string): EventEmitFunction<TParameters>;
export declare function makeUseListenerFunction<TParameters = []>(event: string): EventListenerHook<TParameters>;
/**
 * Create listener, emitter, and hook functions for an event
 * @param event Name of the event to create functions for
 * @returns Listener, Emitter, and Hook functions for the event
 */
export declare function makeEventFunctions<TParameters = []>(event: string): {
    listen: EventListenFunction<TParameters>;
    emit: EventEmitFunction<TParameters>;
    useListener: EventListenerHook<TParameters>;
};
export {};
//# sourceMappingURL=EventUtils.d.ts.map