import { IterableX } from '../iterablex';
import { OperatorFunction } from '../../interfaces';
export declare class GroupedIterable<TKey, TValue> extends IterableX<TValue> {
    readonly key: TKey;
    private _source;
    constructor(key: TKey, source: Iterable<TValue>);
    [Symbol.iterator](): Iterator<TValue, any, undefined>;
}
export declare class GroupByIterable<TSource, TKey, TValue, TResult> extends IterableX<TResult> {
    private _source;
    private _keySelector;
    private _elementSelector;
    private _resultSelector;
    constructor(source: Iterable<TSource>, keySelector: (value: TSource) => TKey, elementSelector: (value: TSource) => TValue, resultSelector: (key: TKey, values: Iterable<TValue>) => TResult);
    [Symbol.iterator](): Generator<TResult, void, unknown>;
}
export declare function groupByResultIdentity<TKey, TValue>(key: TKey, values: Iterable<TValue>): any;
export declare function groupBy<TSource, TKey>(keySelector: (value: TSource) => TKey): OperatorFunction<TSource, GroupedIterable<TKey, TSource>>;
export declare function groupBy<TSource, TKey, TValue>(keySelector: (value: TSource) => TKey, elementSelector?: (value: TSource) => TValue): OperatorFunction<TSource, GroupedIterable<TKey, TValue>>;
export declare function groupBy<TSource, TKey, TValue, TResult>(keySelector: (value: TSource) => TKey, elementSelector?: (value: TSource) => TValue, resultSelector?: (key: TKey, values: Iterable<TValue>) => TResult): OperatorFunction<TSource, TResult>;
