declare type HookListener<T extends any[]> = {
    name: string;
    callback(...args: T): void;
};
export declare abstract class Hook<T extends any[]> {
    private registeredHooks;
    abstract emit(...args: T): any;
    abstract lazyEmit(cb: () => T): any;
    untap(name: string): void;
    tap(name: string, callback: (...args: T) => void): () => void;
    protected getListeners(): HookListener<T>[];
}
export {};
