UNPKG

@reactivex/rxjs

Version:

Reactive Extensions for modern JavaScript

53 lines (52 loc) 2.55 kB
import { Subscriber } from '../Subscriber'; import { Subscription } from '../Subscription'; import { Observable } from '../Observable'; import { Subject } from '../Subject'; /** * Groups the items emitted by an Observable according to a specified criterion, * and emits these grouped items as `GroupedObservables`, one * {@link GroupedObservable} per group. * * <img src="./img/groupBy.png" width="100%"> * * @param {function(value: T): K} keySelector a function that extracts the key * for each item. * @param {function(value: T): R} [elementSelector] a function that extracts the * return element for each item. * @param {function(grouped: GroupedObservable<K,R>): Observable<any>} [durationSelector] * a function that returns an Observable to determine how long each group should * exist. * @return {Observable<GroupedObservable<K,R>>} an Observable that emits * GroupedObservables, each of which corresponds to a unique key value and each * of which emits those items from the source Observable that share that key * value. * @method groupBy * @owner Observable */ export declare function groupBy<T, K, R>(keySelector: (value: T) => K, elementSelector?: (value: T) => R, durationSelector?: (grouped: GroupedObservable<K, R>) => Observable<any>): Observable<GroupedObservable<K, R>>; export interface GroupBySignature<T> { <K>(keySelector: (value: T) => K): Observable<GroupedObservable<K, T>>; <K>(keySelector: (value: T) => K, elementSelector: void, durationSelector: (grouped: GroupedObservable<K, T>) => Observable<any>): Observable<GroupedObservable<K, T>>; <K, R>(keySelector: (value: T) => K, elementSelector?: (value: T) => R, durationSelector?: (grouped: GroupedObservable<K, R>) => Observable<any>): Observable<GroupedObservable<K, R>>; } export interface RefCountSubscription { count: number; unsubscribe: () => void; isUnsubscribed: boolean; attemptedToUnsubscribe: boolean; } /** * An Observable representing values belonging to the same group represented by * a common key. The values emitted by a GroupedObservable come from the source * Observable. The common key is available as the field `key` on a * GroupedObservable instance. * * @class GroupedObservable<K, T> */ export declare class GroupedObservable<K, T> extends Observable<T> { key: K; private groupSubject; private refCountSubscription; constructor(key: K, groupSubject: Subject<T>, refCountSubscription?: RefCountSubscription); protected _subscribe(subscriber: Subscriber<T>): Subscription; }