Exclude ?? operator from true/false literal check in createFlowCondition

This commit is contained in:
Anders Hejlsberg
2019-10-24 09:41:07 -04:00
parent 6f04f526d4
commit 7be925173c
2 changed files with 8 additions and 5 deletions
+4 -5
View File
@@ -951,11 +951,10 @@ namespace ts {
if (!expression) {
return flags & FlowFlags.TrueCondition ? antecedent : unreachableFlow;
}
if (expression.kind === SyntaxKind.TrueKeyword && flags & FlowFlags.FalseCondition ||
expression.kind === SyntaxKind.FalseKeyword && flags & FlowFlags.TrueCondition) {
if (!isExpressionOfOptionalChainRoot(expression)) {
return unreachableFlow;
}
if ((expression.kind === SyntaxKind.TrueKeyword && flags & FlowFlags.FalseCondition ||
expression.kind === SyntaxKind.FalseKeyword && flags & FlowFlags.TrueCondition) &&
!isExpressionOfOptionalChainRoot(expression) && !isQuestionQuestionExpression(expression.parent)) {
return unreachableFlow;
}
if (!isNarrowingExpression(expression)) {
return antecedent;
+4
View File
@@ -5953,6 +5953,10 @@ namespace ts {
return isOptionalChainRoot(node.parent) && node.parent.expression === node;
}
export function isQuestionQuestionExpression(node: Node) {
return node.kind === SyntaxKind.BinaryExpression && (<BinaryExpression>node).operatorToken.kind === SyntaxKind.QuestionQuestionToken;
}
export function isNewExpression(node: Node): node is NewExpression {
return node.kind === SyntaxKind.NewExpression;
}