From b5a39e814f05cc1441e6a8df2d3feb25eef491e3 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 25 Mar 2018 15:24:31 -0700 Subject: [PATCH] Change to more conservative conditional type relationship --- src/compiler/checker.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a0c24197873..10b6aaf14f3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10200,18 +10200,18 @@ namespace ts { } else if (source.flags & TypeFlags.Conditional) { if (target.flags & TypeFlags.Conditional) { - if (isTypeIdenticalTo((source).checkType, (target).checkType) && - isTypeIdenticalTo((source).extendsType, (target).extendsType)) { + // Two conditional types 'T1 extends U1 ? X1 : Y1' and 'T2 extends U2 ? X2 : Y2' are related if + // one of T1 and T2 is related to the other, U1 and U2 are identical types, X1 is related to X2, + // and Y1 is related to Y2. + if (isTypeIdenticalTo((source).extendsType, (target).extendsType) && + (isRelatedTo((source).checkType, (target).checkType) || isRelatedTo((target).checkType, (source).checkType))) { if (result = isRelatedTo(getTrueTypeFromConditionalType(source), getTrueTypeFromConditionalType(target), reportErrors)) { result &= isRelatedTo(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target), reportErrors); } - } - else { - result = isRelatedTo(getDefaultConstraintOfConditionalType(source), getDefaultConstraintOfConditionalType(target), reportErrors); - } - if (result) { - errorInfo = saveErrorInfo; - return result; + if (result) { + errorInfo = saveErrorInfo; + return result; + } } } else if (relation !== definitelyAssignableRelation) {