@@ -8233,8 +8233,8 @@ namespace ts {
8233
8233
for (let i = 0; i < checkCount; i++) {
8234
8234
const sourceType = i < sourceMax ? getTypeOfParameter(sourceParams[i]) : getRestTypeOfSignature(source);
8235
8235
const targetType = i < targetMax ? getTypeOfParameter(targetParams[i]) : getRestTypeOfSignature(target);
8236
- const sourceSig = getSingleCallSignature(getNonNullableType( sourceType) );
8237
- const targetSig = getSingleCallSignature(getNonNullableType( targetType) );
8236
+ const sourceSig = getSingleCallSignature(sourceType);
8237
+ const targetSig = getSingleCallSignature(targetType);
8238
8238
// In order to ensure that any generic type Foo<T> is at least co-variant with respect to T no matter
8239
8239
// how Foo uses T, we need to relate parameters bi-variantly (given that parameters are input positions,
8240
8240
// they naturally relate only contra-variantly). However, if the source and target parameters both have
@@ -8243,9 +8243,7 @@ namespace ts {
8243
8243
// similar to return values, callback parameters are output positions. This means that a Promise<T>,
8244
8244
// where T is used only in callback parameter positions, will be co-variant (as opposed to bi-variant)
8245
8245
// with respect to T.
8246
- const callbacks = sourceSig && targetSig && !sourceSig.typePredicate && !targetSig.typePredicate &&
8247
- (getFalsyFlags(sourceType) & TypeFlags.Nullable) === (getFalsyFlags(targetType) & TypeFlags.Nullable);
8248
- const related = callbacks ?
8246
+ const related = sourceSig && targetSig && !sourceSig.typePredicate && !targetSig.typePredicate ?
8249
8247
compareSignaturesRelated(targetSig, sourceSig, /*checkAsCallback*/ true, /*ignoreReturnTypes*/ false, reportErrors, errorReporter, compareTypes) :
8250
8248
!checkAsCallback && compareTypes(sourceType, targetType, /*reportErrors*/ false) || compareTypes(targetType, sourceType, reportErrors);
8251
8249
if (!related) {
0 commit comments