Skip to content

Commit b4b711f

Browse files
committed
Infer from base constraint signatures instead of erased signatures
1 parent ceba507 commit b4b711f

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

src/compiler/checker.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6726,6 +6726,16 @@ namespace ts {
67266726
isInJavaScriptFile(signature.declaration));
67276727
}
67286728

6729+
function getBaseSignature(signature: Signature) {
6730+
const typeParameters = signature.typeParameters;
6731+
if (typeParameters) {
6732+
const typeEraser = createTypeEraser(typeParameters);
6733+
const baseConstraints = map(typeParameters, tp => instantiateType(getBaseConstraintOfType(tp), typeEraser) || emptyObjectType);
6734+
return instantiateSignature(signature, createTypeMapper(typeParameters, baseConstraints), /*eraseTypeParameters*/ true);
6735+
}
6736+
return signature;
6737+
}
6738+
67296739
function getOrCreateTypeFromSignature(signature: Signature): ObjectType {
67306740
// There are two ways to declare a construct signature, one is by declaring a class constructor
67316741
// using the constructor keyword, and the other is declaring a bare construct signature in an
@@ -10955,7 +10965,7 @@ namespace ts {
1095510965
const targetLen = targetSignatures.length;
1095610966
const len = sourceLen < targetLen ? sourceLen : targetLen;
1095710967
for (let i = 0; i < len; i++) {
10958-
inferFromSignature(getErasedSignature(sourceSignatures[sourceLen - len + i]), getErasedSignature(targetSignatures[targetLen - len + i]));
10968+
inferFromSignature(getBaseSignature(sourceSignatures[sourceLen - len + i]), getBaseSignature(targetSignatures[targetLen - len + i]));
1095910969
}
1096010970
}
1096110971

0 commit comments

Comments
 (0)