Check strictly when either source or target is a strict signature

This commit is contained in:
Anders Hejlsberg
2020-12-16 09:26:41 -10:00
parent bec8071c65
commit 77b5139cb0
+6 -3
View File
@@ -16183,6 +16183,11 @@ namespace ts {
isTypeAny(getReturnTypeOfSignature(s));
}
function isStrictSignature(sig: Signature) {
const kind = sig.declaration ? sig.declaration.kind : SyntaxKind.Unknown;
return kind !== SyntaxKind.MethodDeclaration && kind !== SyntaxKind.MethodSignature && kind !== SyntaxKind.Constructor;
}
/**
* See signatureRelatedTo, compareSignaturesIdentical
*/
@@ -16226,9 +16231,7 @@ namespace ts {
return Ternary.False;
}
const kind = target.declaration ? target.declaration.kind : SyntaxKind.Unknown;
const strictVariance = !(checkMode & SignatureCheckMode.Callback) && strictFunctionTypes && kind !== SyntaxKind.MethodDeclaration &&
kind !== SyntaxKind.MethodSignature && kind !== SyntaxKind.Constructor;
const strictVariance = !(checkMode & SignatureCheckMode.Callback) && strictFunctionTypes && (isStrictSignature(target) || isStrictSignature(source));
let result = Ternary.True;
const sourceThisType = getThisTypeOfSignature(source);