@@ -13549,14 +13549,16 @@ namespace ts {
13549
13549
const sourceLen = sourceSignatures.length;
13550
13550
const targetLen = targetSignatures.length;
13551
13551
const len = sourceLen < targetLen ? sourceLen : targetLen;
13552
+ const skipParameters = !!(source.flags & TypeFlags.ContainsAnyFunctionType);
13552
13553
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 );
13554
13555
}
13555
13556
}
13556
13557
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
+ }
13560
13562
const sourceTypePredicate = getTypePredicateOfSignature(source);
13561
13563
const targetTypePredicate = getTypePredicateOfSignature(target);
13562
13564
if (sourceTypePredicate && targetTypePredicate && sourceTypePredicate.kind === targetTypePredicate.kind) {
@@ -20576,8 +20578,10 @@ namespace ts {
20576
20578
return links.contextFreeType;
20577
20579
}
20578
20580
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;
20581
20585
}
20582
20586
return anyFunctionType;
20583
20587
}
0 commit comments