From 092338f1b19e480ebbbfd869970043bc6fa0e17e Mon Sep 17 00:00:00 2001 From: David Driscoll Date: Wed, 16 Dec 2015 16:22:05 -0500 Subject: [PATCH 1/2] style(typings): added enhanced typings for combineLatest --- src/CoreOperators.ts | 4 ++- src/Observable.ts | 6 ++--- src/operator/combineLatest.ts | 50 ++++++++++++++++++++++++++++++----- 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/CoreOperators.ts b/src/CoreOperators.ts index 9aa9769ab8..2ceccfc5ce 100644 --- a/src/CoreOperators.ts +++ b/src/CoreOperators.ts @@ -5,6 +5,8 @@ import {Subject} from './Subject'; import {GroupedObservable} from './operator/groupBy'; import {Notification} from './Notification'; +import {CombineLatestSignature} from './operator/combineLatest'; + export interface CoreOperators { buffer?: (closingNotifier: Observable) => Observable; bufferCount?: (bufferSize: number, startBufferEvery: number) => Observable; @@ -13,7 +15,7 @@ export interface CoreOperators { bufferWhen?: (closingSelector: () => Observable) => Observable; catch?: (selector: (err: any, source: Observable, caught: Observable) => Observable) => Observable; combineAll?: (project?: (...values: Array) => R) => Observable; - combineLatest?: (...observables: Array | ((...values: Array) => R)>) => Observable; + combineLatest: CombineLatestSignature; concat?: (...observables: (Observable | Scheduler)[]) => Observable; concatAll?: () => Observable; concatMap?: (project: ((x: T, ix: number) => Observable), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; diff --git a/src/Observable.ts b/src/Observable.ts index 4e3ddc6234..a14f2a8c61 100644 --- a/src/Observable.ts +++ b/src/Observable.ts @@ -37,6 +37,8 @@ import {ErrorObservable} from './observable/ErrorObservable'; import {AjaxCreationMethod} from './observable/dom/AjaxObservable'; import {WebSocketSubject} from './observable/dom/WebSocketSubject'; +import {CombineLatestSignature} from './operator/combineLatest'; + export type ObservableOrPromise = Observable | Promise; export type ArrayOrIterator = Iterator | ArrayLike; export type ObservableInput = ObservableOrPromise | ArrayOrIterator; @@ -191,9 +193,7 @@ export class Observable implements CoreOperators { bufferWhen: (closingSelector: () => Observable) => Observable; catch: (selector: (err: any, source: Observable, caught: Observable) => Observable) => Observable; combineAll: (project?: (...values: Array) => R) => Observable; - combineLatest: (...observables: Array | - Array> | - ((...values: Array) => R)>) => Observable; + combineLatest: CombineLatestSignature; concat: (...observables: (Observable | Scheduler)[]) => Observable; concatAll: () => Observable; concatMap: (project: ((x: T, ix: number) => Observable), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; diff --git a/src/operator/combineLatest.ts b/src/operator/combineLatest.ts index 876a2af09f..9d30d538f0 100644 --- a/src/operator/combineLatest.ts +++ b/src/operator/combineLatest.ts @@ -1,4 +1,4 @@ -import {Observable} from '../Observable'; +import {Observable, ObservableInput} from '../Observable'; import {ArrayObservable} from '../observable/ArrayObservable'; import {isArray} from '../util/isArray'; import {Scheduler} from '../Scheduler'; @@ -19,8 +19,8 @@ import {subscribeToResult} from '../util/subscribeToResult'; * @returns {Observable} an observable of other projected values from the most recent values from each observable, or an array of each of * the most recent values from each observable. */ -export function combineLatest(...observables: Array | - Array> | +export function combineLatest(...observables: Array | + Array> | ((...values: Array) => R)>): Observable { let project: (...values: Array) => R = null; if (typeof observables[observables.length - 1] === 'function') { @@ -38,6 +38,27 @@ export function combineLatest(...observables: Array | return new ArrayObservable(observables).lift(new CombineLatestOperator(project)); } +/* tslint:disable:max-line-length */ +export interface CombineLatestSignature { + (v2: ObservableInput): Observable<[T, T2]>; + (v2: ObservableInput, v3: ObservableInput): Observable<[T, T2, T3]>; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput): Observable<[T, T2, T3, T4]>; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput): Observable<[T, T2, T3, T4, T5]>; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput): Observable<[T, T2, T3, T4, T5, T6]>; + + (project: (v1: T) => R): Observable; + (v2: ObservableInput, project: (v1: T, v2: T2) => R): Observable; + (v2: ObservableInput, v3: ObservableInput, project: (v1: T, v2: T2, v3: T3) => R): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): Observable; + + (...observables: Array | ((...values: Array) => R)>): Observable; + (array: ObservableInput[]): Observable; + (array: ObservableInput[], project: (...values: Array) => R): Observable; +} +/* tslint:enable:max-line-length */ + /** * Combines the values from observables passed as arguments. This is done by subscribing * to each observable, in order, and collecting an array of each of the most recent values any time any of the observables @@ -48,8 +69,25 @@ export function combineLatest(...observables: Array | * @returns {Observable} an observable of other projected values from the most recent values from each observable, or an array of each of * the most recent values from each observable. */ -export function combineLatestStatic(...observables: Array | - Array> | +/* tslint:disable:max-line-length */ +export function combineLatestStatic(v1: ObservableInput): Observable<[T]>; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput): Observable<[T, T2]>; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput): Observable<[T, T2, T3]>; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput): Observable<[T, T2, T3, T4]>; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput): Observable<[T, T2, T3, T4, T5]>; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput): Observable<[T, T2, T3, T4, T5, T6]>; +export function combineLatestStatic(v1: ObservableInput, project: (v1: T) => R): Observable; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput, project: (v1: T, v2: T2) => R): Observable; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, project: (v1: T, v2: T2, v3: T3) => R): Observable; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): Observable; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): Observable; +export function combineLatestStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): Observable; +export function combineLatestStatic(...observables: Array | ((...values: Array) => R)>): Observable; +export function combineLatestStatic(array: ObservableInput[]): Observable; +export function combineLatestStatic(array: ObservableInput[], project: (...values: Array) => R): Observable; +/* tslint:enable:max-line-length */ +export function combineLatestStatic(...observables: Array | + Array> | (((...values: Array) => R)) | Scheduler>): Observable { let project: (...values: Array) => R = null; @@ -150,4 +188,4 @@ export class CombineLatestSubscriber extends OuterSubscriber { } this.destination.next(result); } -} +} \ No newline at end of file From 91bc0e80f0bf50ff1afee14d5fd04cc5aa41f487 Mon Sep 17 00:00:00 2001 From: David Driscoll Date: Sat, 16 Jan 2016 20:22:32 -0500 Subject: [PATCH 2/2] style(typings): added enhanced typings for bindCallback --- src/observable/BoundCallbackObservable.ts | 18 ++++++++++++++++++ src/operator/combineLatest.ts | 14 +++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/observable/BoundCallbackObservable.ts b/src/observable/BoundCallbackObservable.ts index 039305de87..034e1d4bcc 100644 --- a/src/observable/BoundCallbackObservable.ts +++ b/src/observable/BoundCallbackObservable.ts @@ -9,6 +9,24 @@ import {AsyncSubject} from '../subject/AsyncSubject'; export class BoundCallbackObservable extends Observable { subject: AsyncSubject; + /* tslint:disable:max-line-length */ + static create(callbackFunc: (callback: (result: R) => any) => any, selector?: void, scheduler?: Scheduler): () => Observable; + static create(callbackFunc: (v1: T, callback: (result: R) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T) => Observable; + static create(callbackFunc: (v1: T, v2: T2, callback: (result: R) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2) => Observable; + static create(callbackFunc: (v1: T, v2: T2, v3: T3, callback: (result: R) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3) => Observable; + static create(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, callback: (result: R) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4) => Observable; + static create(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, callback: (result: R) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => Observable; + static create(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, callback: (result: R) => any) => any, selector?: void, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => Observable; + static create(callbackFunc: (callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: Scheduler): () => Observable; + static create(callbackFunc: (v1: T, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: Scheduler): (v1: T) => Observable; + static create(callbackFunc: (v1: T, v2: T2, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: Scheduler): (v1: T, v2: T2) => Observable; + static create(callbackFunc: (v1: T, v2: T2, v3: T3, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3) => Observable; + static create(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4) => Observable; + static create(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => Observable; + static create(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: Scheduler): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => Observable; + static create(callbackFunc: Function, selector?: void, scheduler?: Scheduler): (...args: any[]) => Observable; + static create(callbackFunc: Function, selector?: (...args: any[]) => T, scheduler?: Scheduler): (...args: any[]) => Observable; + /* tslint:enable:max-line-length */ static create(callbackFunc: Function, selector: Function | void = undefined, scheduler?: Scheduler): (...args: any[]) => Observable { diff --git a/src/operator/combineLatest.ts b/src/operator/combineLatest.ts index 9d30d538f0..3242f9b541 100644 --- a/src/operator/combineLatest.ts +++ b/src/operator/combineLatest.ts @@ -40,12 +40,6 @@ export function combineLatest(...observables: Array | /* tslint:disable:max-line-length */ export interface CombineLatestSignature { - (v2: ObservableInput): Observable<[T, T2]>; - (v2: ObservableInput, v3: ObservableInput): Observable<[T, T2, T3]>; - (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput): Observable<[T, T2, T3, T4]>; - (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput): Observable<[T, T2, T3, T4, T5]>; - (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput): Observable<[T, T2, T3, T4, T5, T6]>; - (project: (v1: T) => R): Observable; (v2: ObservableInput, project: (v1: T, v2: T2) => R): Observable; (v2: ObservableInput, v3: ObservableInput, project: (v1: T, v2: T2, v3: T3) => R): Observable; @@ -53,6 +47,12 @@ export interface CombineLatestSignature { (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): Observable; (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): Observable; + (v2: ObservableInput): Observable<[T, T2]>; + (v2: ObservableInput, v3: ObservableInput): Observable<[T, T2, T3]>; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput): Observable<[T, T2, T3, T4]>; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput): Observable<[T, T2, T3, T4, T5]>; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput): Observable<[T, T2, T3, T4, T5, T6]>; + (...observables: Array | ((...values: Array) => R)>): Observable; (array: ObservableInput[]): Observable; (array: ObservableInput[], project: (...values: Array) => R): Observable; @@ -188,4 +188,4 @@ export class CombineLatestSubscriber extends OuterSubscriber { } this.destination.next(result); } -} \ No newline at end of file +}