From 4e57f700d0e2b966ed4983f978f6df4afee62564 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Thu, 27 Oct 2016 15:42:41 -0700 Subject: [PATCH] Ignore optionality when skipping overloads --- src/compiler/checker.ts | 9 +-------- ...genericCallWithOverloadedFunctionTypedArguments.types | 4 ++-- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 52153f5103b..88376a3dcb0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11906,16 +11906,9 @@ namespace ts { function isAritySmaller(sourceType: Type, target: Expression) { if (isFunctionExpressionOrArrowFunction(target) && isFunctionType(sourceType)) { - let targetParameterCount = 0; - for (; targetParameterCount < target.parameters.length; targetParameterCount++) { - const param = target.parameters[targetParameterCount]; - if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) { - break; - } - } const sourceSignatures = getSignaturesOfType(sourceType, SignatureKind.Call); const sourceLengths = sourceSignatures.map(sig => !sig.hasRestParameter ? sig.parameters.length : Number.MAX_VALUE); - return forEach(sourceLengths, len => len < targetParameterCount); + return forEach(sourceLengths, len => len < target.parameters.length); } return false; diff --git a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types index ab07e9c880a..c26370a7640 100644 --- a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types +++ b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types @@ -122,8 +122,8 @@ module GenericParameter { >'' : "" var r11 = foo6((x: T, y?: T) => ''); // any => string (+1 overload) ->r11 : { (x: any): string; (x: any, y?: any): string; } ->foo6((x: T, y?: T) => '') : { (x: any): string; (x: any, y?: any): string; } +>r11 : any +>foo6((x: T, y?: T) => '') : any >foo6 : (cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } >(x: T, y?: T) => '' : (x: T, y?: T) => string >T : T