import { EventEmitter } from 'events';
import type { EventMap } from './types/eventMap';
/**
* A generic event emitter class that allows for type-safe event handling.
*
* @template TEvents - The type of events and their payloads.
*/
export declare class TypedEventEmitter<TEvents extends EventMap> extends EventEmitter {
    /**
    * Emits an event with the specified payload.
    *
    * @template KEvent - The type of event to emit.
    * @param event - The event name to emit.
    * @param payload - The data to send with the event.
    * @returns Whether the event had listeners.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
    * const emitter = new MyEmitter();
    * emitter.emit('foo', 'hello');
    * ```
    */
    emit<KEvent extends keyof TEvents>(event: KEvent, ...args: TEvents[KEvent]): boolean;
    /**
    * Registers an event listener for the specified event.
    *
    * @template KEvent - The type of event to listen for.
    * @param event - The event name to listen for.
    * @param listener - The callback function that handles the event.
    * @returns This instance for chaining.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
    * const emitter = new MyEmitter();
    * emitter.on('foo', payload => {
    *   console.log(payload); // payload is string
    * });
    * ```
    */
    on<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
    /**
    * Registers a one-time event listener for the specified event.
    *
    * @template KEvent - The type of event to listen for.
    * @param event - The event name to listen for.
    * @param listener - The callback function that handles the event.
    * @returns This instance for chaining.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ bar: [number] }> {}
    * const emitter = new MyEmitter();
    * emitter.once('bar', payload => {
    *   console.log(payload); // payload is number
    * });
    * ```
    */
    once<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
    /**
    * Registers an event listener for the specified event (alias for on).
    *
    * @template KEvent - The type of event to listen for.
    * @param event - The event name to listen for.
    * @param listener - The callback function that handles the event.
    * @returns This instance for chaining.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ baz: [boolean] }> {}
    * const emitter = new MyEmitter();
    * emitter.addListener('baz', payload => {
    *   console.log(payload); // payload is boolean
    * });
    * ```
    */
    addListener<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
    /**
    * Removes an event listener for the specified event.
    *
    * @template KEvent - The type of event.
    * @param event - The event name.
    * @param listener - The callback function to remove.
    * @returns This instance for chaining.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ foo: string }> {}
    * const emitter = new MyEmitter();
    * const handler = (payload: string) => {};
    * emitter.on('foo', handler);
    * emitter.removeListener('foo', handler);
    * ```
    */
    removeListener<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
    /**
    * Removes an event listener for the specified event (alias for removeListener).
    *
    * @template KEvent - The type of event.
    * @param event - The event name.
    * @param listener - The callback function to remove.
    * @returns This instance for chaining.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
    * const emitter = new MyEmitter();
    * const handler = (payload: string) => {};
    * emitter.on('foo', handler);
    * emitter.off('foo', handler);
    * ```
    */
    off<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
    /**
    * Returns the number of listeners for the specified event.
    *
    * @template KEvent - The type of event.
    * @param event - The event name.
    * @returns The number of listeners.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
    * const emitter = new MyEmitter();
    * emitter.on('foo', () => {});
    * const count = emitter.listenerCount('foo');
    * ```
    */
    listenerCount<KEvent extends keyof TEvents>(event: KEvent): number;
    /**
    * Returns a copy of the array of listeners for the specified event.
    *
    * @template KEvent - The type of event.
    * @param event - The event name.
    * @returns An array of listener functions.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
    * const emitter = new MyEmitter();
    * emitter.on('foo', () => {});
    * const listeners = emitter.listeners('foo');
    * ```
    */
    listeners<KEvent extends keyof TEvents>(event: KEvent): ((...args: TEvents[KEvent]) => void)[];
    /**
    * Returns a copy of the array of raw listeners for the specified event.
    *
    * @template KEvent - The type of event.
    * @param event - The event name.
    * @returns An array of raw listener functions.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
    * const emitter = new MyEmitter();
    * emitter.on('foo', () => {});
    * const rawListeners = emitter.rawListeners('foo');
    * ```
    */
    rawListeners<KEvent extends keyof TEvents>(event: KEvent): ((...args: TEvents[KEvent]) => void)[];
    /**
    * Adds a listener to the beginning of the listeners array for the specified event.
    *
    * @template KEvent - The type of event.
    * @param event - The event name.
    * @param listener - The callback function to add.
    * @returns This instance for chaining.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
    * const emitter = new MyEmitter();
    * emitter.prependListener('foo', payload => {
    *   console.log(payload);
    * });
    * ```
    */
    prependListener<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
    /**
    * Adds a one-time listener to the beginning of the listeners array for the specified event.
    *
    * @template KEvent - The type of event.
    * @param event - The event name.
    * @param listener - The callback function to add.
    * @returns This instance for chaining.
    *
    * @example
    * ```typescript
    * class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
    * const emitter = new MyEmitter();
    * emitter.prependOnceListener('foo', payload => {
    *   console.log(payload);
    * });
    * ```
    */
    prependOnceListener<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
}
