diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 43c9818e623..fa65b82f41b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -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);