From 8c607e96968c95f9439f474cca2a4cc5651cbc57 Mon Sep 17 00:00:00 2001 From: Dkosasih Date: Tue, 25 Sep 2018 10:35:47 +1000 Subject: [PATCH] =?UTF-8?q?fix(pipe):=20align=20static=20pipe=20to=20Obser?= =?UTF-8?q?vable=20pipe=20rest=20parameters=20overl=E2=80=A6=20(#4112)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(pipe): align static pipe to Observable pipe rest parameters overload (#4109) * test(pipe): add dtslint test for rest parameters overload (#4109) --- spec-dtslint/util/pipe-spec.ts | 8 ++++++++ src/internal/util/pipe.ts | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/spec-dtslint/util/pipe-spec.ts b/spec-dtslint/util/pipe-spec.ts index dfa104f395..b715aea054 100644 --- a/spec-dtslint/util/pipe-spec.ts +++ b/spec-dtslint/util/pipe-spec.ts @@ -44,6 +44,14 @@ it('should infer for 9 arguments', () => { 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('8', '9')); // $ExpectType UnaryFunction<"0", "9"> }); +it('should infer {} for more than 9 arguments', () => { + 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('8', '9'), a('9', '10')); // $ExpectType UnaryFunction<"0", {}> +}); + +it('should require a type assertion for more than 9 arguments', () => { + const o: UnaryFunction<'0', '10'> = 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('8', '9'), a('9', '10')); // $ExpectError +}); + it('should enforce types for the 2nd argument', () => { const o = pipe(a('0', '1'), a('#', '2')); // $ExpectError }); diff --git a/src/internal/util/pipe.ts b/src/internal/util/pipe.ts index 10890528c4..14c92cb976 100644 --- a/src/internal/util/pipe.ts +++ b/src/internal/util/pipe.ts @@ -15,9 +15,10 @@ export function pipe(op1: UnaryFunction, op2: UnaryFu export function pipe(op1: UnaryFunction, op2: UnaryFunction, op3: UnaryFunction, op4: UnaryFunction, op5: UnaryFunction, op6: UnaryFunction, op7: UnaryFunction): UnaryFunction; export function pipe(op1: UnaryFunction, op2: UnaryFunction, op3: UnaryFunction, op4: UnaryFunction, op5: UnaryFunction, op6: UnaryFunction, op7: UnaryFunction, op8: UnaryFunction): UnaryFunction; export function pipe(op1: UnaryFunction, op2: UnaryFunction, op3: UnaryFunction, op4: UnaryFunction, op5: UnaryFunction, op6: UnaryFunction, op7: UnaryFunction, op8: UnaryFunction, op9: UnaryFunction): UnaryFunction; +export function pipe(op1: UnaryFunction, op2: UnaryFunction, op3: UnaryFunction, op4: UnaryFunction, op5: UnaryFunction, op6: UnaryFunction, op7: UnaryFunction, op8: UnaryFunction, op9: UnaryFunction, ...operations: UnaryFunction[]): UnaryFunction; /* tslint:enable:max-line-length */ -export function pipe(...fns: Array>): UnaryFunction { +export function pipe(...fns: Array>): UnaryFunction { return pipeFromArray(fns); }