From ca3d0d37a7d58692a6daadb2fe6b5dc338cf63e8 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 6e1bc4df603..62ca22845f3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10226,18 +10226,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) {