@@ -6779,8 +6779,19 @@ namespace ts {
6779
6779
}
6780
6780
6781
6781
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,
6783
6783
/*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;
6784
6795
}
6785
6796
6786
6797
function getExpandedParameters(sig: Signature): ReadonlyArray<Symbol> {
@@ -6890,9 +6901,8 @@ namespace ts {
6890
6901
const thisType = getUnionType(map(unionSignatures, sig => sig.thisParameter ? getTypeOfSymbol(sig.thisParameter) : anyType), UnionReduction.Subtype);
6891
6902
thisParameter = createSymbolWithType(signature.thisParameter!, thisType);
6892
6903
}
6893
- s = cloneSignature (signature);
6904
+ s = createUnionSignature (signature, unionSignatures );
6894
6905
s.thisParameter = thisParameter;
6895
- s.unionSignatures = unionSignatures;
6896
6906
}
6897
6907
(result || (result = [])).push(s);
6898
6908
}
@@ -8400,8 +8410,6 @@ namespace ts {
8400
8410
if (returnSignature) {
8401
8411
const newReturnSignature = cloneSignature(returnSignature);
8402
8412
newReturnSignature.typeParameters = inferredTypeParameters;
8403
- newReturnSignature.target = returnSignature.target;
8404
- newReturnSignature.mapper = returnSignature.mapper;
8405
8413
const newInstantiatedSignature = cloneSignature(instantiatedSignature);
8406
8414
newInstantiatedSignature.resolvedReturnType = getOrCreateTypeFromSignature(newReturnSignature);
8407
8415
return newInstantiatedSignature;
@@ -18346,14 +18354,8 @@ namespace ts {
18346
18354
}
18347
18355
}
18348
18356
}
18349
-
18350
18357
// 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);
18357
18359
}
18358
18360
18359
18361
function checkSpreadExpression(node: SpreadElement, checkMode?: CheckMode): Type {
0 commit comments