From fe49c5d923a85b7d9ae97f3a9cddee1e925ffa07 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 29 Oct 2026 16:17:15 -0700 Subject: [PATCH] Reject non-access targets early when matching access references Co-authored-by: Steven Chong <25894545+teamchong@users.noreply.github.com> --- tsc/internal/checker/flow.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tsc/internal/checker/flow.go b/tsc/internal/checker/flow.go index d2831231772fe..6193c10b2f222 100644 --- a/tsc/internal/checker/flow.go +++ b/tsc/internal/checker/flow.go @@ -1619,11 +1619,12 @@ func (c *Checker) isMatchingReference(source *ast.Node, target *ast.Node) bool { case ast.KindNonNullExpression, ast.KindParenthesizedExpression, ast.KindSatisfiesExpression: return c.isMatchingReference(source.Expression(), target) case ast.KindPropertyAccessExpression, ast.KindElementAccessExpression: + if !ast.IsAccessExpression(target) { + return false + } if sourcePropertyName, ok := c.getAccessedPropertyName(source); ok { - if ast.IsAccessExpression(target) { - if targetPropertyName, ok := c.getAccessedPropertyName(target); ok { - return targetPropertyName == sourcePropertyName && c.isMatchingReference(source.Expression(), target.Expression()) - } + if targetPropertyName, ok := c.getAccessedPropertyName(target); ok { + return targetPropertyName == sourcePropertyName && c.isMatchingReference(source.Expression(), target.Expression()) } } if ast.IsElementAccessExpression(source) && ast.IsElementAccessExpression(target) {