Skip to content

Commit 62b0d98

Browse files
authored
Merge pull request #30303 from Microsoft/fixSignatureQuickInfo
Fix quick info for higher order generic functions
2 parents 8e2a154 + cc9e9ec commit 62b0d98

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

src/compiler/checker.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6779,8 +6779,19 @@ namespace ts {
67796779
}
67806780

67816781
function cloneSignature(sig: Signature): Signature {
6782-
return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, /*resolvedReturnType*/ undefined,
6782+
const result = createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, /*resolvedReturnType*/ undefined,
67836783
/*resolvedTypePredicate*/ undefined, sig.minArgumentCount, sig.hasRestParameter, sig.hasLiteralTypes);
6784+
result.target = sig.target;
6785+
result.mapper = sig.mapper;
6786+
return result;
6787+
}
6788+
6789+
function createUnionSignature(signature: Signature, unionSignatures: Signature[]) {
6790+
const result = cloneSignature(signature);
6791+
result.unionSignatures = unionSignatures;
6792+
result.target = undefined;
6793+
result.mapper = undefined;
6794+
return result;
67846795
}
67856796

67866797
function getExpandedParameters(sig: Signature): ReadonlyArray<Symbol> {
@@ -6890,9 +6901,8 @@ namespace ts {
68906901
const thisType = getUnionType(map(unionSignatures, sig => sig.thisParameter ? getTypeOfSymbol(sig.thisParameter) : anyType), UnionReduction.Subtype);
68916902
thisParameter = createSymbolWithType(signature.thisParameter!, thisType);
68926903
}
6893-
s = cloneSignature(signature);
6904+
s = createUnionSignature(signature, unionSignatures);
68946905
s.thisParameter = thisParameter;
6895-
s.unionSignatures = unionSignatures;
68966906
}
68976907
(result || (result = [])).push(s);
68986908
}
@@ -8400,8 +8410,6 @@ namespace ts {
84008410
if (returnSignature) {
84018411
const newReturnSignature = cloneSignature(returnSignature);
84028412
newReturnSignature.typeParameters = inferredTypeParameters;
8403-
newReturnSignature.target = returnSignature.target;
8404-
newReturnSignature.mapper = returnSignature.mapper;
84058413
const newInstantiatedSignature = cloneSignature(instantiatedSignature);
84068414
newInstantiatedSignature.resolvedReturnType = getOrCreateTypeFromSignature(newReturnSignature);
84078415
return newInstantiatedSignature;
@@ -18346,14 +18354,8 @@ namespace ts {
1834618354
}
1834718355
}
1834818356
}
18349-
1835018357
// Result is union of signatures collected (return type is union of return types of this signature set)
18351-
let result: Signature | undefined;
18352-
if (signatureList) {
18353-
result = cloneSignature(signatureList[0]);
18354-
result.unionSignatures = signatureList;
18355-
}
18356-
return result;
18358+
return signatureList && createUnionSignature(signatureList[0], signatureList);
1835718359
}
1835818360

1835918361
function checkSpreadExpression(node: SpreadElement, checkMode?: CheckMode): Type {

0 commit comments

Comments
 (0)