Skip to content

Commit f03e790

Browse files
committed
fix(TypeScript): ensure RxJS builds with TS@next as well
1 parent 0972c56 commit f03e790

File tree

4 files changed

+37
-25
lines changed

4 files changed

+37
-25
lines changed

spec-dtslint/util/pipe-spec.ts

+19-4
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,29 @@ it('should enforce types for the 9th argument', () => {
8484
const o = pipe(a('0', '1'), a('1', '2'), a('2', '3'), a('3', '4'), a('4', '5'), a('5', '6'), a('6', '7'), a('7', '8'), a('#', '9')); // $ExpectError
8585
});
8686

87-
it('should return generic OperatorFunction', () => {
87+
it('should return generic OperatorFunction 1', () => {
88+
const customOperator = <T>(p: T) => (a: Observable<T>) => a;
89+
90+
const staticPipe = pipe(customOperator('infer'));
91+
const o = of('foo').pipe(staticPipe); // $ExpectType Observable<string>
92+
});
93+
94+
it('should return generic OperatorFunction 2', () => {
8895
const customOperator = <T>() => (a: Observable<T>) => a;
8996

90-
const staticPipe = pipe(customOperator());
97+
const staticPipe = pipe(customOperator<string>());
9198
const o = of('foo').pipe(staticPipe); // $ExpectType Observable<string>
9299
});
93100

101+
it('should return generic OperatorFunction 3', () => {
102+
const customOperator = <T>() => (a: Observable<T>) => a;
103+
104+
// type can't be possibly be inferred here, so it's {} instead of T.
105+
const staticPipe = pipe(customOperator());
106+
const o = of('foo').pipe(staticPipe); // $ExpectType Observable<{}>
107+
});
108+
94109
it('should return generic function', () => {
95-
const func = pipe((value: string) => value);
96-
const value = func("foo"); // $ExpectType "foo"
110+
const func = pipe((value: string) => value, (value: string) => value + value);
111+
const value = func("foo"); // $ExpectType string
97112
});

spec/operators/zipAll-spec.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,10 @@ describe('zipAll operator', () => {
3535
it('should take all observables from the source and zip them', (done) => {
3636
const expected = ['a1', 'b2', 'c3'];
3737
let i = 0;
38-
of(
38+
const source = of(
3939
of('a', 'b', 'c'),
4040
of(1, 2, 3)
41-
)
42-
.pipe(zipAll((a, b) => String(a) + String(b)))
41+
).pipe(zipAll((a: string, b: number) => a + b))
4342
.subscribe((x) => {
4443
expect(x).to.equal(expected[i++]);
4544
}, null, done);
@@ -378,7 +377,7 @@ describe('zipAll operator', () => {
378377
of('a', 'b', 'c'),
379378
of(1, 2)
380379
)
381-
.pipe(zipAll((a, b) => String(a) + String(b)))
380+
.pipe(zipAll((a: string, b: number) => a + b))
382381
.subscribe((x) => {
383382
expect(x).to.equal(expected[i++]);
384383
}, null, done);

src/internal/operators/reduce.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,9 @@ export function reduce<T, R>(accumulator: (acc: R, value: T, index?: number) =>
7171
};
7272
}
7373
return function reduceOperatorFunction(source: Observable<T>): Observable<R> {
74-
return pipe(scan<T, T | R>((acc, value, index) => {
75-
return accumulator(<R>acc, value, index + 1);
76-
}), takeLast(1))(source) as Observable<R>;
74+
return pipe(
75+
scan((acc: R, value: T, index: number): R => accumulator(acc, value, index + 1)),
76+
takeLast(1),
77+
)(source);
7778
};
7879
}

src/internal/util/pipe.ts

+11-14
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
11
import { noop } from './noop';
2-
import { UnaryFunction, MonoTypeOperatorFunction } from '../types';
3-
import { Observable } from '../Observable';
2+
import { UnaryFunction } from '../types';
43

54
/* tslint:disable:max-line-length */
65
export function pipe<T>(): UnaryFunction<T, T>;
7-
export function pipe<T>(...operators: MonoTypeOperatorFunction<T>[]): <R extends T>(source: Observable<R>) => Observable<R>;
8-
export function pipe<T>(...operators: UnaryFunction<T, T>[]): <R extends T>(source: R) => R;
9-
export function pipe<T, A>(op1: UnaryFunction<T, A>): UnaryFunction<T, A>;
10-
export function pipe<T, A, B>(op1: UnaryFunction<T, A>, op2: UnaryFunction<A, B>): UnaryFunction<T, B>;
11-
export function pipe<T, A, B, C>(op1: UnaryFunction<T, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>): UnaryFunction<T, C>;
12-
export function pipe<T, A, B, C, D>(op1: UnaryFunction<T, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>): UnaryFunction<T, D>;
13-
export function pipe<T, A, B, C, D, E>(op1: UnaryFunction<T, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>, op5: UnaryFunction<D, E>): UnaryFunction<T, E>;
14-
export function pipe<T, A, B, C, D, E, F>(op1: UnaryFunction<T, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>, op5: UnaryFunction<D, E>, op6: UnaryFunction<E, F>): UnaryFunction<T, F>;
15-
export function pipe<T, A, B, C, D, E, F, G>(op1: UnaryFunction<T, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>, op5: UnaryFunction<D, E>, op6: UnaryFunction<E, F>, op7: UnaryFunction<F, G>): UnaryFunction<T, G>;
16-
export function pipe<T, A, B, C, D, E, F, G, H>(op1: UnaryFunction<T, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>, op5: UnaryFunction<D, E>, op6: UnaryFunction<E, F>, op7: UnaryFunction<F, G>, op8: UnaryFunction<G, H>): UnaryFunction<T, H>;
17-
export function pipe<T, A, B, C, D, E, F, G, H, I>(op1: UnaryFunction<T, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>, op5: UnaryFunction<D, E>, op6: UnaryFunction<E, F>, op7: UnaryFunction<F, G>, op8: UnaryFunction<G, H>, op9: UnaryFunction<H, I>): UnaryFunction<T, I>;
18-
export function pipe<T, A, B, C, D, E, F, G, H, I>(op1: UnaryFunction<T, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>, op5: UnaryFunction<D, E>, op6: UnaryFunction<E, F>, op7: UnaryFunction<F, G>, op8: UnaryFunction<G, H>, op9: UnaryFunction<H, I>, ...operations: UnaryFunction<any, any>[]): UnaryFunction<T, {}>;
6+
export function pipe<T, A>(fn1: UnaryFunction<T, A>): UnaryFunction<T, A>;
7+
export function pipe<T, A, B>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>): UnaryFunction<T, B>;
8+
export function pipe<T, A, B, C>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>): UnaryFunction<T, C>;
9+
export function pipe<T, A, B, C, D>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>): UnaryFunction<T, D>;
10+
export function pipe<T, A, B, C, D, E>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>): UnaryFunction<T, E>;
11+
export function pipe<T, A, B, C, D, E, F>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>): UnaryFunction<T, F>;
12+
export function pipe<T, A, B, C, D, E, F, G>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>, fn7: UnaryFunction<F, G>): UnaryFunction<T, G>;
13+
export function pipe<T, A, B, C, D, E, F, G, H>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>, fn7: UnaryFunction<F, G>, fn8: UnaryFunction<G, H>): UnaryFunction<T, H>;
14+
export function pipe<T, A, B, C, D, E, F, G, H, I>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>, fn7: UnaryFunction<F, G>, fn8: UnaryFunction<G, H>, fn9: UnaryFunction<H, I>): UnaryFunction<T, I>;
15+
export function pipe<T, A, B, C, D, E, F, G, H, I>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>, fn4: UnaryFunction<C, D>, fn5: UnaryFunction<D, E>, fn6: UnaryFunction<E, F>, fn7: UnaryFunction<F, G>, fn8: UnaryFunction<G, H>, fn9: UnaryFunction<H, I>, ...fns: UnaryFunction<any, any>[]): UnaryFunction<T, {}>;
1916
/* tslint:enable:max-line-length */
2017

2118
export function pipe(...fns: Array<UnaryFunction<any, any>>): UnaryFunction<any, any> {

0 commit comments

Comments
 (0)