@@ -18452,32 +18452,6 @@ namespace ts {
1845218452 return false;
1845318453 }
1845418454
18455- // Return true if target is a property access xxx.yyy, source is a property access xxx.zzz, the declared
18456- // type of xxx is a union type, and yyy is a property that is possibly a discriminant. We consider a property
18457- // a possible discriminant if its type differs in the constituents of containing union type, and if every
18458- // choice is a unit type or a union of unit types.
18459- function containsMatchingReferenceDiscriminant(source: Node, target: Node) {
18460- let name;
18461- return isAccessExpression(target) &&
18462- containsMatchingReference(source, target.expression) &&
18463- (name = getAccessedPropertyName(target)) !== undefined &&
18464- isDiscriminantProperty(getDeclaredTypeOfReference(target.expression), name);
18465- }
18466-
18467- function getDeclaredTypeOfReference(expr: Node): Type | undefined {
18468- if (expr.kind === SyntaxKind.Identifier) {
18469- return getTypeOfSymbol(getResolvedSymbol(<Identifier>expr));
18470- }
18471- if (isAccessExpression(expr)) {
18472- const type = getDeclaredTypeOfReference(expr.expression);
18473- if (type) {
18474- const propName = getAccessedPropertyName(expr);
18475- return propName !== undefined ? getTypeOfPropertyOfType(type, propName) : undefined;
18476- }
18477- }
18478- return undefined;
18479- }
18480-
1848118455 function isDiscriminantProperty(type: Type | undefined, name: __String) {
1848218456 if (type && type.flags & TypeFlags.Union) {
1848318457 const prop = getUnionOrIntersectionProperty(<UnionType>type, name);
@@ -19509,9 +19483,6 @@ namespace ts {
1950919483 type = narrowTypeByDiscriminant(type, expr as AccessExpression,
1951019484 t => narrowTypeBySwitchOnDiscriminant(t, flow.switchStatement, flow.clauseStart, flow.clauseEnd));
1951119485 }
19512- else if (containsMatchingReferenceDiscriminant(reference, expr)) {
19513- type = declaredType;
19514- }
1951519486 }
1951619487 return createFlowType(type, isIncomplete(flowType));
1951719488 }
@@ -19696,9 +19667,6 @@ namespace ts {
1969619667 if (isMatchingReferenceDiscriminant(expr, declaredType)) {
1969719668 return narrowTypeByDiscriminant(type, <AccessExpression>expr, t => getTypeWithFacts(t, assumeTrue ? TypeFacts.Truthy : TypeFacts.Falsy));
1969819669 }
19699- if (containsMatchingReferenceDiscriminant(reference, expr)) {
19700- return declaredType;
19701- }
1970219670 return type;
1970319671 }
1970419672
@@ -19758,9 +19726,6 @@ namespace ts {
1975819726 if (isMatchingReferenceDiscriminant(right, declaredType)) {
1975919727 return narrowTypeByDiscriminant(type, <AccessExpression>right, t => narrowTypeByEquality(t, operator, left, assumeTrue));
1976019728 }
19761- if (containsMatchingReferenceDiscriminant(reference, left) || containsMatchingReferenceDiscriminant(reference, right)) {
19762- return declaredType;
19763- }
1976419729 break;
1976519730 case SyntaxKind.InstanceOfKeyword:
1976619731 return narrowTypeByInstanceof(type, expr, assumeTrue);
@@ -20172,9 +20137,6 @@ namespace ts {
2017220137 if (isMatchingReferenceDiscriminant(expr, declaredType)) {
2017320138 return narrowTypeByDiscriminant(type, <AccessExpression>expr, t => getTypeWithFacts(t, assumePresent ? TypeFacts.NEUndefinedOrNull : TypeFacts.EQUndefinedOrNull));
2017420139 }
20175- if (containsMatchingReferenceDiscriminant(reference, expr)) {
20176- return declaredType;
20177- }
2017820140 return type;
2017920141 }
2018020142 }
0 commit comments