import { Iterable } from 'ix'; export interface Comparable { compareTo(other: T): number; } export declare function isComparable(obj: any): obj is Comparable; export declare type ValueComparison = (a: T, B: T) => number; export interface Comparer { compare: ValueComparison; } export declare class ValueComparer implements Comparer { readonly comparison: ValueComparison; static displayName: string; static readonly Default: ValueComparer; static DefaultComparison(a: any, b: any): number; constructor(comparison?: ValueComparison); compare(a: T, b: T): number; } export declare function compare(a: any, b: any): boolean; export declare enum SortDirection { Ascending = 1, Descending = 2, } export declare type FieldValueSelector = (source: TObj, field: string) => TValue; export interface FieldSelector { field: string; valueSelector?: FieldValueSelector; } export interface FieldComparer extends FieldSelector, Comparer { } export declare class ObjectComparer> { static displayName: string; static DefaultComparerKey: string; static createFieldComparer(field: string, comparison: ValueComparison, valueSelector?: (source: TObj, field: string) => TValue): FieldComparer; readonly comparerMap: StringMap>; readonly defaultComparer: FieldComparer | undefined; constructor(defaultSortField: string | undefined, ...comparers: Array>); constructor(...comparers: Array>); getComparer(field?: string): FieldComparer; getCompare(comparer: Comparer): ValueComparison; getValue(source: T, comparer: FieldComparer): any; sortIterable(source: Iterable, field: string, direction?: SortDirection): Iterable; }