Skip to content

Commit

Permalink
chore(typings): improved zip typings
Browse files Browse the repository at this point in the history
removed single tuple type, as this conflicts with trying to pass in a real array.
  • Loading branch information
david-driscoll committed May 24, 2016
1 parent bb2d18b commit 3a6c633
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 4 deletions.
63 changes: 62 additions & 1 deletion spec/observables/zip-spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {expect} from 'chai';
import * as Rx from '../../dist/cjs/Rx';
declare const {hot, cold, expectObservable, expectSubscriptions};
declare const {hot, cold, expectObservable, expectSubscriptions, type};

declare const Symbol: any;

Expand Down Expand Up @@ -575,4 +575,65 @@ describe('Observable.zip', () => {
expect(vals).to.deep.equal(r[i++]);
}, null, done);
});

it('should support observables', () => {
type(() => {
/* tslint:disable:no-unused-variable */
let a: Rx.Observable<number>;
let b: Rx.Observable<string>;
let c: Rx.Observable<boolean>;
let o1: Rx.Observable<[number, string, boolean]> = Observable.zip(a, b, c);
/* tslint:enable:no-unused-variable */
});
});

it('should support mixed observables and promises', () => {
type(() => {
/* tslint:disable:no-unused-variable */
let a: Promise<number>;
let b: Rx.Observable<string>;
let c: Promise<boolean>;
let d: Rx.Observable<string[]>;
let o1: Rx.Observable<[number, string, boolean, string[]]> = Observable.zip(a, b, c, d);
/* tslint:enable:no-unused-variable */
});
});

it('should support arrays of promises', () => {
type(() => {
/* tslint:disable:no-unused-variable */
let a: Promise<number>[];
let o1: Rx.Observable<number[]> = Observable.zip(a);
let o2: Rx.Observable<number[]> = Observable.zip(...a);
/* tslint:enable:no-unused-variable */
});
});

it('should support arrays of observables', () => {
type(() => {
/* tslint:disable:no-unused-variable */
let a: Rx.Observable<number>[];
let o1: Rx.Observable<number[]> = Observable.zip(a);
let o2: Rx.Observable<number[]> = Observable.zip(...a);
/* tslint:enable:no-unused-variable */
});
});

it('should return Array<T> when given a single promise', () => {
type(() => {
/* tslint:disable:no-unused-variable */
let a: Promise<number>;
let o1: Rx.Observable<number[]> = Observable.zip(a);
/* tslint:enable:no-unused-variable */
});
});

it('should return Array<T> when given a single observable', () => {
type(() => {
/* tslint:disable:no-unused-variable */
let a: Rx.Observable<number>;
let o1: Rx.Observable<number[]> = Observable.zip(a);
/* tslint:enable:no-unused-variable */
});
});
});
8 changes: 5 additions & 3 deletions src/operator/zip.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,23 @@ export interface ZipSignature<T> {
/* tslint:enable:max-line-length */

/* tslint:disable:max-line-length */
export function zipStatic<T>(v1: ObservableInput<T>): Observable<[T]>;
export function zipStatic<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>): Observable<[T, T2]>;
export function zipStatic<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<[T, T2, T3]>;
export function zipStatic<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<[T, T2, T3, T4]>;
export function zipStatic<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<[T, T2, T3, T4, T5]>;
export function zipStatic<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<[T, T2, T3, T4, T5, T6]>;
export function zipStatic<T, R>(v1: ObservableInput<T>, project: (v1: T) => R): Observable<R>;
export function zipStatic<T, T2, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, project: (v1: T, v2: T2) => R): Observable<R>;
export function zipStatic<T, T2, T3, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, project: (v1: T, v2: T2, v3: T3) => R): Observable<R>;
export function zipStatic<T, T2, T3, T4, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): Observable<R>;
export function zipStatic<T, T2, T3, T4, T5, R>(v1: ObservableInput<T>, 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>;
export function zipStatic<T, T2, T3, T4, T5, T6, R>(v1: ObservableInput<T>, 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>;
export function zipStatic<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;
export function zipStatic<T>(array: ObservableInput<T>[]): Observable<T[]>;
export function zipStatic<R>(array: ObservableInput<any>[]): Observable<R>;
export function zipStatic<T, R>(array: ObservableInput<T>[], project: (...values: Array<T>) => R): Observable<R>;
export function zipStatic<R>(array: ObservableInput<any>[], project: (...values: Array<any>) => R): Observable<R>;
export function zipStatic<T>(...observables: Array<ObservableInput<T>>): Observable<T[]>;
export function zipStatic<T, R>(...observables: Array<ObservableInput<T> | ((...values: Array<any>) => R)>): Observable<R>;
export function zipStatic<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;
/* tslint:enable:max-line-length */

/**
Expand Down

0 comments on commit 3a6c633

Please sign in to comment.