Skip to content

Commit

Permalink
fix(pipe): Fix rest params signature.
Browse files Browse the repository at this point in the history
So that Observable<any> is used only for excess arguments.
  • Loading branch information
cartant committed Jul 6, 2018
1 parent 4fa078b commit d42a7bb
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
14 changes: 11 additions & 3 deletions source/genericPipe-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ describe("genericPipe", function (): void {

const expectSnippet = expecter(code => `
import { of } from "rxjs";
import { delay, map } from "rxjs/operators";
import { delay, map, mapTo, switchAll } from "rxjs/operators";
import { genericPipe } from "./source/genericPipe";
${code}
`);
`, { strict: true });

it("should infer a non-generic operator for a mono-type operator", () => {

Expand All @@ -75,7 +75,7 @@ describe("genericPipe", function (): void {

const snippet = expectSnippet(`
const operator = map((value: number) => value.toString());
const piped = genericPipe(operator)
const piped = genericPipe(operator);
const source = of(1);
const delayed = source.pipe(piped);
`);
Expand All @@ -84,6 +84,14 @@ describe("genericPipe", function (): void {
snippet.toInfer("source", "Observable<number>");
snippet.toInfer("delayed", "Observable<string>");
});

it("should match Observable<any> only for excess parameters", () => {

const snippet = expectSnippet(`
const piped = genericPipe(mapTo(1), switchAll());
`);
snippet.toFail(/is not assignable to type/);
});
});
}
});
2 changes: 1 addition & 1 deletion source/genericPipe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export function genericPipe<T, A, B, C, D, E, F>(op1: UnaryFunction<T, A>, op2:
export function genericPipe<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>;
export function genericPipe<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>;
export function genericPipe<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>;
export function genericPipe<T, R>(...operators: UnaryFunction<any, any>[]): UnaryFunction<T, R>;
export function genericPipe<T, A, B, C, D, E, F, G, H, I, R>(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>, ...operators: UnaryFunction<any, any>[]): UnaryFunction<T, R>;
export function genericPipe<T, R>(...operators: UnaryFunction<any, any>[]): UnaryFunction<T, R> {
return _pipe.apply(undefined, operators);
}
Expand Down

0 comments on commit d42a7bb

Please sign in to comment.