export type EventMap = Record<string, unknown[]>;
export type Callback<P extends unknown[]> = (...args: P) => void;
export type Listener<P extends unknown[]> = {
    callback: Callback<P> | null;
    next: Listener<P> | null;
};
export declare class Emitter<Events extends EventMap> {
    listeners: {
        [EventName in keyof Events]: Listener<Events[EventName]> | null;
    };
    constructor();
    on<E extends keyof Events>(event: E, callback: Callback<Events[E]>): this;
    once<E extends keyof Events>(event: E, callback: Callback<Events[E]>): this;
    off<E extends keyof Events>(event: E, callback: Callback<Events[E]>): this;
    emit<E extends keyof Events>(event: E, ...args: Events[E]): boolean;
}
