@@ -6778,8 +6778,19 @@ namespace ts {
6778
6778
}
6779
6779
6780
6780
function cloneSignature(sig: Signature): Signature {
6781
- return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, /*resolvedReturnType*/ undefined,
6781
+ const result = createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, /*resolvedReturnType*/ undefined,
6782
6782
/*resolvedTypePredicate*/ undefined, sig.minArgumentCount, sig.hasRestParameter, sig.hasLiteralTypes);
6783
+ result.target = sig.target;
6784
+ result.mapper = sig.mapper;
6785
+ return result;
6786
+ }
6787
+
6788
+ function createUnionSignature(signature: Signature, unionSignatures: Signature[]) {
6789
+ const result = cloneSignature(signature);
6790
+ result.unionSignatures = unionSignatures;
6791
+ result.target = undefined;
6792
+ result.mapper = undefined;
6793
+ return result;
6783
6794
}
6784
6795
6785
6796
function getExpandedParameters(sig: Signature): ReadonlyArray<Symbol> {
@@ -6889,9 +6900,8 @@ namespace ts {
6889
6900
const thisType = getUnionType(map(unionSignatures, sig => sig.thisParameter ? getTypeOfSymbol(sig.thisParameter) : anyType), UnionReduction.Subtype);
6890
6901
thisParameter = createSymbolWithType(signature.thisParameter!, thisType);
6891
6902
}
6892
- s = cloneSignature (signature);
6903
+ s = createUnionSignature (signature, unionSignatures );
6893
6904
s.thisParameter = thisParameter;
6894
- s.unionSignatures = unionSignatures;
6895
6905
}
6896
6906
(result || (result = [])).push(s);
6897
6907
}
@@ -8399,8 +8409,6 @@ namespace ts {
8399
8409
if (returnSignature) {
8400
8410
const newReturnSignature = cloneSignature(returnSignature);
8401
8411
newReturnSignature.typeParameters = inferredTypeParameters;
8402
- newReturnSignature.target = returnSignature.target;
8403
- newReturnSignature.mapper = returnSignature.mapper;
8404
8412
const newInstantiatedSignature = cloneSignature(instantiatedSignature);
8405
8413
newInstantiatedSignature.resolvedReturnType = getOrCreateTypeFromSignature(newReturnSignature);
8406
8414
return newInstantiatedSignature;
@@ -18345,14 +18353,8 @@ namespace ts {
18345
18353
}
18346
18354
}
18347
18355
}
18348
-
18349
18356
// Result is union of signatures collected (return type is union of return types of this signature set)
18350
- let result: Signature | undefined;
18351
- if (signatureList) {
18352
- result = cloneSignature(signatureList[0]);
18353
- result.unionSignatures = signatureList;
18354
- }
18355
- return result;
18357
+ return signatureList && createUnionSignature(signatureList[0], signatureList);
18356
18358
}
18357
18359
18358
18360
function checkSpreadExpression(node: SpreadElement, checkMode?: CheckMode): Type {
0 commit comments