declare type ArgumentsType<T> = T extends (...args: infer A) => any ? A : never;
export declare type UnsubscribeHandle = () => void;
export interface TypedEvents<Listener extends (...args: any[]) => void> {
    subscribe: (listener: Listener) => UnsubscribeHandle;
    emit: (...args: ArgumentsType<Listener>) => void;
}
export declare function createEvents<Listener extends (...args: any[]) => void>(): TypedEvents<Listener>;
export declare function createEvents<T0>(): TypedEvents<(arg0: T0) => void>;
export declare function createEvents<T0, T1>(): TypedEvents<(arg0: T0, arg1: T1) => void>;
export declare function createEvents<T0, T1, T2>(): TypedEvents<(arg0: T0, arg1: T1, arg2: T2) => void>;
export declare function createEvents<T0, T1, T2, T3>(): TypedEvents<(arg0: T0, arg1: T1, arg2: T2, arg3: T3) => void>;
export declare function createEvents<T0, T1, T2, T3, T4>(): TypedEvents<(arg0: T0, arg1: T1, arg2: T2, arg3: T3, arg4: T4) => void>;
export declare function createEvents<T0, T1, T2, T3, T4, T5>(): TypedEvents<(arg0: T0, arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => void>;
export {};
