type EmitterEventsDefinition = Record<string, (...args: unknown[]) => void>;
export declare class Emitter<T extends EmitterEventsDefinition = EmitterEventsDefinition> {
    private destroyed;
    private gcLaunched;
    private eventsForGC?;
    private mapEventToFnWrapper?;
    private mapEventToMapFnToFnWrapper?;
    constructor();
    on<Name extends keyof T>(event: Name, fn: T[Name]): this;
    once<Name extends keyof T>(event: Name, fn: T[Name]): this;
    off<Name extends keyof T>(event?: Name, fn?: T[Name]): this;
    emit<Name extends keyof T>(event: Name, ...args: Parameters<T[Name]>): this;
    destroy(): void;
    private _on;
    private _launchGC;
    private _walkGC;
}
export {};
