export type Rule = (input: unknown) => Output; export type Static = Output extends Rule ? V : Output; export type Key = string | number; export type Constrained = Type & { readonly _constraintSymbol: ConstraintSymbol; }; export declare function constrain(symbol: ConstraintSymbol, input: T): Constrained; export declare function guard>(rule: R): (input: unknown) => input is Static;