(expr)
| 70745 | return result; |
| 70746 | } |
| 70747 | function getCandidateDiscriminantPropertyAccess(expr) { |
| 70748 | if (ts.isBindingPattern(reference) || ts.isFunctionExpressionOrArrowFunction(reference) || ts.isObjectLiteralMethod(reference)) { |
| 70749 | // When the reference is a binding pattern or function or arrow expression, we are narrowing a pesudo-reference in |
| 70750 | // getNarrowedTypeOfSymbol. An identifier for a destructuring variable declared in the same binding pattern or |
| 70751 | // parameter declared in the same parameter list is a candidate. |
| 70752 | if (ts.isIdentifier(expr)) { |
| 70753 | var symbol = getResolvedSymbol(expr); |
| 70754 | var declaration = symbol.valueDeclaration; |
| 70755 | if (declaration && (ts.isBindingElement(declaration) || ts.isParameter(declaration)) && reference === declaration.parent && !declaration.initializer && !declaration.dotDotDotToken) { |
| 70756 | return declaration; |
| 70757 | } |
| 70758 | } |
| 70759 | } |
| 70760 | else if (ts.isAccessExpression(expr)) { |
| 70761 | // An access expression is a candidate if the reference matches the left hand expression. |
| 70762 | if (isMatchingReference(reference, expr.expression)) { |
| 70763 | return expr; |
| 70764 | } |
| 70765 | } |
| 70766 | else if (ts.isIdentifier(expr)) { |
| 70767 | var symbol = getResolvedSymbol(expr); |
| 70768 | if (isConstVariable(symbol)) { |
| 70769 | var declaration = symbol.valueDeclaration; |
| 70770 | // Given 'const x = obj.kind', allow 'x' as an alias for 'obj.kind' |
| 70771 | if (ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && ts.isAccessExpression(declaration.initializer) && |
| 70772 | isMatchingReference(reference, declaration.initializer.expression)) { |
| 70773 | return declaration.initializer; |
| 70774 | } |
| 70775 | // Given 'const { kind: x } = obj', allow 'x' as an alias for 'obj.kind' |
| 70776 | if (ts.isBindingElement(declaration) && !declaration.initializer) { |
| 70777 | var parent = declaration.parent.parent; |
| 70778 | if (ts.isVariableDeclaration(parent) && !parent.type && parent.initializer && (ts.isIdentifier(parent.initializer) || ts.isAccessExpression(parent.initializer)) && |
| 70779 | isMatchingReference(reference, parent.initializer)) { |
| 70780 | return declaration; |
| 70781 | } |
| 70782 | } |
| 70783 | } |
| 70784 | } |
| 70785 | return undefined; |
| 70786 | } |
| 70787 | function getDiscriminantPropertyAccess(expr, computedType) { |
| 70788 | var type = declaredType.flags & 1048576 /* TypeFlags.Union */ ? declaredType : computedType; |
| 70789 | if (type.flags & 1048576 /* TypeFlags.Union */) { |
no test coverage detected