export type PrimitiveKey = string | number | boolean | null | undefined;
export type ICollection<T> = Readonly<{
    all: () => T[];
    toArray: () => T[];
    count: () => number;
    isEmpty: () => boolean;
    map: <U>(fn: (item: T, index: number) => U) => ICollection<U>;
    filter: (fn: (item: T, index: number) => boolean) => ICollection<T>;
    reduce: <U>(fn: (acc: U, item: T, index: number) => U, initial: U) => U;
    first: (fn?: (item: T, index: number) => boolean) => T | undefined;
    last: (fn?: (item: T, index: number) => boolean) => T | undefined;
    pluck: <K extends keyof T>(key: K) => ICollection<T[K]>;
    where: <K extends keyof T>(key: K, value: T[K]) => ICollection<T>;
    unique: (keySelector?: (item: T) => PrimitiveKey) => ICollection<T>;
    sortBy: (keySelector: (item: T) => PrimitiveKey) => ICollection<T>;
    chunk: (size: number) => ICollection<T[]>;
    take: (n: number) => ICollection<T>;
    skip: (n: number) => ICollection<T>;
    keyBy: <K extends PropertyKey>(keySelector: (item: T) => K) => ReadonlyMap<K, T>;
    groupBy: <K extends PropertyKey>(keySelector: (item: T) => K) => ReadonlyMap<K, ICollection<T>>;
    tap: (fn: (items: T[]) => void) => ICollection<T>;
    [Symbol.iterator]: () => Iterator<T>;
}>;
export declare const Collection: Readonly<{
    from: <T>(items: Iterable<T> | ArrayLike<T> | null | undefined) => ICollection<T>;
    of: <T>(...items: T[]) => ICollection<T>;
    isCollection: (value: unknown) => value is ICollection<unknown>;
}>;
export declare function collect<T>(items: Iterable<T> | ArrayLike<T> | null | undefined): ICollection<T>;
//# sourceMappingURL=Collection.d.ts.map