import { IterableX } from '../../iterable/iterablex';
import { GroupedIterable } from '../../iterable/operators/groupby';
export declare function groupByProto<TSource, TKey>(this: IterableX<TSource>, keySelector: (value: TSource) => TKey): IterableX<GroupedIterable<TKey, TSource>>;
export declare function groupByProto<TSource, TKey, TValue>(this: IterableX<TSource>, keySelector: (value: TSource) => TKey, elementSelector?: (value: TSource) => TValue): IterableX<GroupedIterable<TKey, TValue>>;
export declare function groupByProto<TSource, TKey, TValue, TResult>(this: IterableX<TSource>, keySelector: (value: TSource) => TKey | Promise<TKey>, elementSelector?: (value: TSource) => TValue | Promise<TValue>, resultSelector?: (key: TKey, values: Iterable<TValue>) => TResult): IterableX<TResult>;
declare module '../../iterable/iterablex' {
    interface IterableX<T> {
        groupBy: typeof groupByProto;
    }
}
