Skip to content

Commit 9c551a1

Browse files
committed
Ignore parameters when inferring from return type only signature
1 parent b5998d9 commit 9c551a1

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/compiler/checker.ts

+10-6
Original file line numberDiff line numberDiff line change
@@ -13549,14 +13549,16 @@ namespace ts {
1354913549
const sourceLen = sourceSignatures.length;
1355013550
const targetLen = targetSignatures.length;
1355113551
const len = sourceLen < targetLen ? sourceLen : targetLen;
13552+
const skipParameters = !!(source.flags & TypeFlags.ContainsAnyFunctionType);
1355213553
for (let i = 0; i < len; i++) {
13553-
inferFromSignature(getBaseSignature(sourceSignatures[sourceLen - len + i]), getBaseSignature(targetSignatures[targetLen - len + i]));
13554+
inferFromSignature(getBaseSignature(sourceSignatures[sourceLen - len + i]), getBaseSignature(targetSignatures[targetLen - len + i]), skipParameters);
1355413555
}
1355513556
}
1355613557

13557-
function inferFromSignature(source: Signature, target: Signature) {
13558-
forEachMatchingParameterType(source, target, inferFromContravariantTypes);
13559-
13558+
function inferFromSignature(source: Signature, target: Signature, skipParameters: boolean) {
13559+
if (!skipParameters) {
13560+
forEachMatchingParameterType(source, target, inferFromContravariantTypes);
13561+
}
1356013562
const sourceTypePredicate = getTypePredicateOfSignature(source);
1356113563
const targetTypePredicate = getTypePredicateOfSignature(target);
1356213564
if (sourceTypePredicate && targetTypePredicate && sourceTypePredicate.kind === targetTypePredicate.kind) {
@@ -20576,8 +20578,10 @@ namespace ts {
2057620578
return links.contextFreeType;
2057720579
}
2057820580
const returnType = getReturnTypeFromBody(node, checkMode);
20579-
const singleReturnSignature = createSignature(undefined, undefined, undefined, emptyArray, returnType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false);
20580-
return links.contextFreeType = createAnonymousType(node.symbol, emptySymbols, [singleReturnSignature], emptyArray, undefined, undefined);
20581+
const returnOnlySignature = createSignature(undefined, undefined, undefined, emptyArray, returnType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false);
20582+
const returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], emptyArray, undefined, undefined);
20583+
returnOnlyType.flags |= TypeFlags.ContainsAnyFunctionType;
20584+
return links.contextFreeType = returnOnlyType;
2058120585
}
2058220586
return anyFunctionType;
2058320587
}

0 commit comments

Comments
 (0)