@@ -8563,9 +8563,7 @@ namespace ts {
8563
8563
function getSignatureInstantiation(signature: Signature, typeArguments: Type[] | undefined, isJavascript: boolean, inferredTypeParameters?: ReadonlyArray<TypeParameter>): Signature {
8564
8564
const instantiatedSignature = getSignatureInstantiationWithoutFillingInTypeArguments(signature, fillMissingTypeArguments(typeArguments, signature.typeParameters, getMinTypeArgumentCount(signature.typeParameters), isJavascript));
8565
8565
if (inferredTypeParameters) {
8566
- const returnType = getReturnTypeOfSignature(instantiatedSignature);
8567
- const returnSignature = getSingleSignature(returnType, SignatureKind.Call, /*allowMembers*/ false) ||
8568
- getSingleSignature(returnType, SignatureKind.Construct, /*allowMembers*/ false);
8566
+ const returnSignature = getSingleCallOrConstructSignature(getReturnTypeOfSignature(instantiatedSignature));
8569
8567
if (returnSignature) {
8570
8568
const newReturnSignature = cloneSignature(returnSignature);
8571
8569
newReturnSignature.typeParameters = inferredTypeParameters;
@@ -20427,6 +20425,11 @@ namespace ts {
20427
20425
return getSingleSignature(type, SignatureKind.Call, /*allowMembers*/ false);
20428
20426
}
20429
20427
20428
+ function getSingleCallOrConstructSignature(type: Type): Signature | undefined {
20429
+ return getSingleSignature(type, SignatureKind.Call, /*allowMembers*/ false) ||
20430
+ getSingleSignature(type, SignatureKind.Construct, /*allowMembers*/ false);
20431
+ }
20432
+
20430
20433
function getSingleSignature(type: Type, kind: SignatureKind, allowMembers: boolean): Signature | undefined {
20431
20434
if (type.flags & TypeFlags.Object) {
20432
20435
const resolved = resolveStructuredTypeMembers(<ObjectType>type);
@@ -23775,7 +23778,7 @@ namespace ts {
23775
23778
const constructSignature = getSingleSignature(type, SignatureKind.Construct, /*allowMembers*/ true);
23776
23779
const signature = callSignature || constructSignature;
23777
23780
if (signature && signature.typeParameters) {
23778
- if (checkMode & CheckMode.SkipGenericFunctions) {
23781
+ if (checkMode & CheckMode.SkipGenericFunctions && getSingleCallOrConstructSignature(type) ) {
23779
23782
skippedGenericFunction(node, checkMode);
23780
23783
return anyFunctionType;
23781
23784
}
@@ -23791,9 +23794,7 @@ namespace ts {
23791
23794
// if some of the outer function type parameters have no inferences so far. If so, we can
23792
23795
// potentially add inferred type parameters to the outer function return type.
23793
23796
const returnType = context.signature && getReturnTypeOfSignature(context.signature);
23794
- const returnSignature = returnType && (
23795
- getSingleSignature(returnType, SignatureKind.Call, /*allowMembers*/ false) ||
23796
- getSingleSignature(returnType, SignatureKind.Construct, /*allowMembers*/ false));
23797
+ const returnSignature = returnType && getSingleCallOrConstructSignature(returnType);
23797
23798
if (returnSignature && !returnSignature.typeParameters && !every(context.inferences, hasInferenceCandidates)) {
23798
23799
// Instantiate the signature with its own type parameters as type arguments, possibly
23799
23800
// renaming the type parameters to ensure they have unique names.
0 commit comments