export declare type Comparable = number | string | boolean | undefined | null | Date; export declare type ComparableFilter = T extends Comparable ? T : never; export declare type ComparablePropertyNames = { [K in keyof T]: T[K] extends Comparable ? K : never; }[keyof T]; export declare type ComparableProperties = Pick>; export declare type CompareArg = ComparablePropertyNames | ((t: T) => Comparable); export declare type CompareFn = (a: T, b: T) => number; export declare function compareBy(extract: CompareArg, ...extractors: CompareArg[]): CompareFn; export declare function compareBy(extract: CompareArg): CompareFn; export declare function compareBy(extract1: CompareArg, extract2: CompareArg): CompareFn; export declare function compareBy(extract1: CompareArg, extract2: CompareArg, extract3: CompareArg): CompareFn; export declare function compareByRev(extract: CompareArg, ...extractors: CompareArg[]): CompareFn; export declare function compareByRev(extract: CompareArg): CompareFn; export declare function compareByRev(extract1: CompareArg, extract2: CompareArg): CompareFn; export declare function compareByRev(extract1: CompareArg, extract2: CompareArg, extract3: CompareArg): CompareFn; export declare function compareEach(...compareFn: CompareFn[]): CompareFn; export declare function compare(a: ComparableFilter, b: ComparableFilter): number; export declare function reverse(fn: CompareFn): CompareFn;