Skip to content

Commit 846bcca

Browse files
style(typings): added enhanced typings for bindCallback and combineLatest
1 parent 7a679b6 commit 846bcca

File tree

5 files changed

+50
-5
lines changed

5 files changed

+50
-5
lines changed

src/CoreOperators.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {Subject} from './Subject';
55
import {GroupedObservable} from './operator/groupBy-support';
66
import {Notification} from './Notification';
77

8+
import {CombineLatestDeclaration} from './operator/combineLatest';
9+
810
export interface CoreOperators<T> {
911
buffer?: (closingNotifier: Observable<any>) => Observable<T[]>;
1012
bufferCount?: (bufferSize: number, startBufferEvery: number) => Observable<T[]>;
@@ -13,7 +15,7 @@ export interface CoreOperators<T> {
1315
bufferWhen?: (closingSelector: () => Observable<any>) => Observable<T[]>;
1416
catch?: (selector: (err: any, source: Observable<T>, caught: Observable<any>) => Observable<any>) => Observable<T>;
1517
combineAll?: <R>(project?: (...values: Array<any>) => R) => Observable<R>;
16-
combineLatest?: <R>(...observables: Array<Observable<any> | ((...values: Array<any>) => R)>) => Observable<R>;
18+
combineLatest: CombineLatestDeclaration<this>;
1719
concat?: <R>(...observables: (Observable<any> | Scheduler)[]) => Observable<R>;
1820
concatAll?: () => Observable<T>;
1921
concatMap?: <R>(project: ((x: T, ix: number) => Observable<any>), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable<R>;

src/Observable.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ import {ErrorObservable} from './observable/throw';
3535
import {AjaxCreationMethod} from './observable/dom/ajax';
3636
import {WebSocketSubject} from './observable/dom/webSocket';
3737

38+
import {CombineLatestDeclaration} from './operator/combineLatest';
39+
3840
/**
3941
* A representation of any set of values over any amount of time. This the most basic building block
4042
* of RxJS.
@@ -196,9 +198,7 @@ export class Observable<T> implements CoreOperators<T> {
196198
bufferWhen: (closingSelector: () => Observable<any>) => Observable<T[]>;
197199
catch: (selector: (err: any, source: Observable<T>, caught: Observable<any>) => Observable<any>) => Observable<T>;
198200
combineAll: <R>(project?: (...values: Array<any>) => R) => Observable<R>;
199-
combineLatest: <R>(...observables: Array<Observable<any> |
200-
Array<Observable<any>> |
201-
((...values: Array<any>) => R)>) => Observable<R>;
201+
combineLatest: CombineLatestDeclaration<this>;
202202
concat: <R>(...observables: (Observable<any> | Scheduler)[]) => Observable<R>;
203203
concatAll: () => Observable<any>;
204204
concatMap: <R>(project: ((x: T, ix: number) => Observable<any>), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable<R>;

src/add/operator/combineLatest.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
import {Observable} from '../../Observable';
66
import {combineLatest} from '../../operator/combineLatest';
77

8-
Observable.prototype.combineLatest = combineLatest;
8+
Observable.prototype.combineLatest = <any>combineLatest;
99

1010
export var _void: void;

src/observable/bindCallback.ts

+18
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,24 @@ import {AsyncSubject} from '../subject/AsyncSubject';
99
export class BoundCallbackObservable<T> extends Observable<T> {
1010
subject: AsyncSubject<T>;
1111

12+
/* tslint:disable:max-line-length */
13+
static create<TResult>(callbackFunc: (callback: (result: TResult) => any) => any, selector?: void, scheduler?: Scheduler): () => Observable<TResult>;
14+
static create<T, TResult>(callbackFunc: (v1: T, callback: (result: TResult) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T) => Observable<TResult>;
15+
static create<T, T2, TResult>(callbackFunc: (v1: T, v2: T2, callback: (result: TResult) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2) => Observable<TResult>;
16+
static create<T, T2, T3, TResult>(callbackFunc: (v1: T, v2: T2, v3: T3, callback: (result: TResult) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3) => Observable<TResult>;
17+
static create<T, T2, T3, T4, TResult>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, callback: (result: TResult) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4) => Observable<TResult>;
18+
static create<T, T2, T3, T4, T5, TResult>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, callback: (result: TResult) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => Observable<TResult>;
19+
static create<T, T2, T3, T4, T5, T6, TResult>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, callback: (result: TResult) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => Observable<TResult>;
20+
static create<TResult>(callbackFunc: (callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): () => Observable<TResult>;
21+
static create<T, TResult>(callbackFunc: (v1: T, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (v1: T) => Observable<TResult>;
22+
static create<T, T2, TResult>(callbackFunc: (v1: T, v2: T2, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (v1: T, v2: T2) => Observable<TResult>;
23+
static create<T, T2, T3, TResult>(callbackFunc: (v1: T, v2: T2, v3: T3, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3) => Observable<TResult>;
24+
static create<T, T2, T3, T4, TResult>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4) => Observable<TResult>;
25+
static create<T, T2, T3, T4, T5, TResult>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => Observable<TResult>;
26+
static create<T, T2, T3, T4, T5, T6, TResult>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => Observable<TResult>;
27+
static create<T>(callbackFunc: Function, selector?: void, scheduler?: Scheduler): (...args: any[]) => Observable<T>;
28+
static create<T>(callbackFunc: Function, selector?: (...args: any[]) => T, scheduler?: Scheduler): (...args: any[]) => Observable<T>;
29+
/* tslint:enable:max-line-length */
1230
static create<T>(callbackFunc: Function,
1331
selector: Function | void = undefined,
1432
scheduler?: Scheduler): (...args: any[]) => Observable<T> {

src/operator/combineLatest.ts

+25
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,28 @@ export function combineLatest<T, R>(...observables: Array<Observable<any> |
3131

3232
return new ArrayObservable(observables).lift<T, R>(new CombineLatestOperator<T, R>(project));
3333
}
34+
35+
/* These types would be come standard types used through-out the library */
36+
export type ObservableOrPromise<T> = Observable<T> | Promise<T>;
37+
export type ArrayOrIterator<T> = Iterator<T> | ArrayLike<T> | Array<T>;
38+
export type ObservableInput<T> = Observable<T> | Promise<T> | Iterator<T> | ArrayLike<T>;
39+
40+
/* tslint:disable:max-line-length */
41+
export interface CombineLatestDeclaration<T> {
42+
<T2>(v2: ObservableInput<T2>): Observable<[T, T2]>;
43+
<T2, T3>(v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<[T, T2, T3]>;
44+
<T2, T3, T4>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<[T, T2, T3, T4]>;
45+
<T2, T3, T4, T5>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<[T, T2, T3, T4, T5]>;
46+
<T2, T3, T4, T5, T6>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<[T, T2, T3, T4, T5, T6]>;
47+
48+
<R>(project: (v1: T) => R): Observable<R>;
49+
<T2, R>(v2: ObservableInput<T2>, project: (v1: T, v2: T2) => R): Observable<R>;
50+
<T2, T3, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, project: (v1: T, v2: T2, v3: T3) => R): Observable<R>;
51+
<T2, T3, T4, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): Observable<R>;
52+
<T2, T3, T4, T5, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): Observable<R>;
53+
<T2, T3, T4, T5, T6, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): Observable<R>;
54+
55+
<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;
56+
<R>(array: ObservableInput<any>[]): Observable<R>;
57+
<R>(array: ObservableInput<any>[], project: (...values: Array<any>) => R): Observable<R>;
58+
}

0 commit comments

Comments
 (0)