export type EventMap = Record<string, any[]>;
export type EventKey<T extends EventMap> = keyof T;
export type EventArgs<T extends EventMap, K extends EventKey<T>> = K extends keyof T ? T[K] : never;
export type EventListener<T extends EventMap, K extends EventKey<T>> = T[K] extends unknown[] ? (...args: T[K]) => any : never;
/**
 * Implements an event emitter, conceptually similar to Node.js' native
 * EventEmitter, that supports asynchronous event handlers/listeners.
 *
 * This class provides a foundation for event-based communication between
 * BACnet components. It allows objects to register listeners for specific events
 * and trigger those events asynchronously.
 *
 * @typeParam T - An interface mapping event names to their argument arrays
 */
export declare class AsyncEventEmitter<T extends EventMap> {
    #private;
    /**
     * Creates a new Evented instance with no registered listeners
     */
    constructor();
    /**
     * Adds a new listener for the specified event.
     *
     * @param event - The event name to subscribe to
     * @param cb - The callback function to execute when the event is triggered
     * @returns The callback function for chaining
     */
    on<K extends EventKey<T>>(event: K, cb: EventListener<T, K>): void;
    /**
     * Alias for `on`
     */
    addListener<K extends EventKey<T>>(event: K, cb: EventListener<T, K>): void;
    /**
     * Fires an event. All subscribed listeners will be called synchronously.
     * Promises will be ignored.
     *
     * @param event - The event name to trigger
     * @param args - The arguments to pass to each listener
     * @internal
     */
    ___emit<K extends EventKey<T>>(event: K, ...args: EventArgs<T, K>): void;
    /**
     * Fires an event. All subscribed listeners will be called in series.
     * Promises will be awaited for before continuing to the next listener.
     *
     * @param rethrow - Whether to rethrow errors thrown by listeners or ignore them
     * @param event - The event name to trigger
     * @param args - The arguments to pass to each listener
     * @returns A promise that resolves when all listeners have completed
     * @internal
     */
    ___asyncEmitSeries<K extends EventKey<T>>(rethrow: boolean, event: K, ...args: EventArgs<T, K>): Promise<void>;
}
//# sourceMappingURL=events.d.ts.map