import type { Resolver } from "./event.js";
import type { Handler, HandlerFunc } from "./hook.js";
import { Hook } from "./hook.js";
export interface Tagger extends Resolver {
    Tags(): string[];
}
export declare class TaggedHook<T extends Tagger> {
    #private;
    constructor(hook: Hook<T>, tags: string[]);
    CanTriggerOn(tagsToCheck: string[]): boolean;
    Bind(handler: Handler<T>): string;
    BindFunc(fn: HandlerFunc<T>): string;
    Trigger(event: T, ...oneOffHandlerFuncs: HandlerFunc<T>[]): unknown;
    Unbind(...idsToRemove: string[]): void;
    UnbindAll(): void;
    Length(): number;
    canTriggerOn(tagsToCheck: string[]): boolean;
    bind(handler: Handler<T>): string;
    bindFunc(fn: HandlerFunc<T>): string;
    trigger(event: T, ...oneOffHandlerFuncs: HandlerFunc<T>[]): unknown;
    unbind(...idsToRemove: string[]): void;
    unbindAll(): void;
    length(): number;
}
export declare function NewTaggedHook<T extends Tagger>(hook: Hook<T>, ...tags: string[]): TaggedHook<T>;
