import type { Comparator } from "@rickosborne/typical";
import type { Unbounded } from "./range-like.js";
export declare const BOUND_GT = ">";
export declare const BOUND_GTE = ">=";
export declare const BOUND_LT = "<";
export declare const BOUND_LTE = "<=";
export type BoundType = typeof BOUND_GT | typeof BOUND_GTE | typeof BOUND_LT | typeof BOUND_LTE;
export declare const BOUND_TYPES: Readonly<BoundType[]>;
export declare const boundTypeComparator: Comparator<BoundType>;
export declare const boundTypeComparisonIsValid: Readonly<Record<BoundType, (comparison: number) => boolean>>;
export declare const boundComparator: <T>(a: Bound<T> | Unbounded, b: Bound<T> | Unbounded) => number;
export declare class Bound<T> {
    static gt<N extends number>(value: number): Bound<N>;
    static gt<S extends string>(value: string): Bound<S>;
    static gt<U>(value: U, comparator: Comparator<U>): Bound<U>;
    static gte<N extends number>(value: number): Bound<N>;
    static gte<S extends string>(value: string): Bound<S>;
    static gte<U>(value: U, comparator: Comparator<U>): Bound<U>;
    static lt<N extends number>(value: number): Bound<N>;
    static lt<S extends string>(value: string): Bound<S>;
    static lt<U>(value: U, comparator: Comparator<U>): Bound<U>;
    static lte<N extends number>(value: number): Bound<N>;
    static lte<S extends string>(value: string): Bound<S>;
    static lte<U>(value: U, comparator: Comparator<U>): Bound<U>;
    readonly boundType: BoundType;
    readonly comparator: Comparator<T>;
    readonly isInc: boolean;
    private readonly validator;
    readonly value: T;
    protected constructor(value: T, boundType: BoundType, comparator: Comparator<T>);
    compareTo(other: Bound<T> | Unbounded): number;
    isValid(value: T): boolean;
    toString(): string;
}
//# sourceMappingURL=bound.d.ts.map