Merge pull request #30303 from Microsoft/fixSignatureQuickInfo

Fix quick info for higher order generic functions
This commit is contained in:
Anders Hejlsberg 2019-03-10 09:02:10 -07:00 committed by GitHub
commit 62b0d984bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6779,8 +6779,19 @@ namespace ts {
}
function cloneSignature(sig: Signature): Signature {
return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, /*resolvedReturnType*/ undefined,
const result = createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, /*resolvedReturnType*/ undefined,
/*resolvedTypePredicate*/ undefined, sig.minArgumentCount, sig.hasRestParameter, sig.hasLiteralTypes);
result.target = sig.target;
result.mapper = sig.mapper;
return result;
}
function createUnionSignature(signature: Signature, unionSignatures: Signature[]) {
const result = cloneSignature(signature);
result.unionSignatures = unionSignatures;
result.target = undefined;
result.mapper = undefined;
return result;
}
function getExpandedParameters(sig: Signature): ReadonlyArray<Symbol> {
@ -6890,9 +6901,8 @@ namespace ts {
const thisType = getUnionType(map(unionSignatures, sig => sig.thisParameter ? getTypeOfSymbol(sig.thisParameter) : anyType), UnionReduction.Subtype);
thisParameter = createSymbolWithType(signature.thisParameter!, thisType);
}
s = cloneSignature(signature);
s = createUnionSignature(signature, unionSignatures);
s.thisParameter = thisParameter;
s.unionSignatures = unionSignatures;
}
(result || (result = [])).push(s);
}
@ -8400,8 +8410,6 @@ namespace ts {
if (returnSignature) {
const newReturnSignature = cloneSignature(returnSignature);
newReturnSignature.typeParameters = inferredTypeParameters;
newReturnSignature.target = returnSignature.target;
newReturnSignature.mapper = returnSignature.mapper;
const newInstantiatedSignature = cloneSignature(instantiatedSignature);
newInstantiatedSignature.resolvedReturnType = getOrCreateTypeFromSignature(newReturnSignature);
return newInstantiatedSignature;
@ -18346,14 +18354,8 @@ namespace ts {
}
}
}
// Result is union of signatures collected (return type is union of return types of this signature set)
let result: Signature | undefined;
if (signatureList) {
result = cloneSignature(signatureList[0]);
result.unionSignatures = signatureList;
}
return result;
return signatureList && createUnionSignature(signatureList[0], signatureList);
}
function checkSpreadExpression(node: SpreadElement, checkMode?: CheckMode): Type {