Skip to content

Internal error in tsc: "TypeError: Cannot read properties of undefined (reading 'flags')" #61583

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
GaurangTandon opened this issue Apr 16, 2025 · 2 comments Β· May be fixed by #61593
Open

Internal error in tsc: "TypeError: Cannot read properties of undefined (reading 'flags')" #61583

GaurangTandon opened this issue Apr 16, 2025 · 2 comments Β· May be fixed by #61593
Assignees
Labels
Bug A bug in TypeScript

Comments

@GaurangTandon
Copy link

GaurangTandon commented Apr 16, 2025

πŸ”Ž Search Terms

TypeError: Cannot read properties of undefined (reading 'flags')

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about unhandled TypeScript errors

⏯ Repository Link

https://github.com/GaurangTandon/tsc-issue-repro

πŸ’» Code

const UPDATE_MARKER_FUNC = 'updateMarkerPosition';
window[UPDATE_MARKER_FUNC] = (coordinates, color = 'red') => {};

πŸ™ Actual behavior

/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:122142
      throw e;
      ^

TypeError: Cannot read properties of undefined (reading 'flags')
    at getMembersOfSymbol (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:56777:19)
    at getLateBoundSymbol (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:56787:11)
    at getSymbolOfDeclaration (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:49588:43)
    at getSymbolOfNode (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:49591:34)
    at getFunctionExpressionParentSymbolOrSymbol (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:49598:198)
    at getResolvedMembersOrExportsOfSymbol (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:56742:27)
    at getExportsOfSymbol (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:49486:61)
    at resolveAnonymousTypeMembers (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:57350:19)
    at resolveStructuredTypeMembers (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:57698:11)
    at getSignaturesOfStructuredType (/Users/blazegt/test-tsc/node_modules/typescript/lib/_tsc.js:58389:24)

Node.js v20.18.3

πŸ™‚ Expected behavior

Internal TypeScript errors should not be thrown.

Additional information about the issue

No response

@RyanCavanaugh
Copy link
Member

Shorter repo (JS file)

const UPDATE_MARKER_FUNC = 'updateMarkerPosition';
window[UPDATE_MARKER_FUNC] = () => { };

Run with --allowJs --noEmit

Workaround

const UPDATE_MARKER_FUNC = 'updateMarkerPosition';
window[UPDATE_MARKER_FUNC.toString()] = () => { };

Longer stack trace

_tsc.js:122168
      throw e;
      ^

TypeError: Cannot read properties of undefined (reading 'flags')
    at getMembersOfSymbol (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:56780:19)
    at getLateBoundSymbol (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:56790:11)
    at getSymbolOfDeclaration (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:49591:43)
    at getSymbolOfNode (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:49594:34)
    at getFunctionExpressionParentSymbolOrSymbol (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:49601:198)
    at getResolvedMembersOrExportsOfSymbol (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:56745:27)
    at getExportsOfSymbol (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:49489:61)
    at resolveAnonymousTypeMembers (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:57353:19)
    at resolveStructuredTypeMembers (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:57701:11)
    at getSignaturesOfStructuredType (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:58392:24)
    at getSignaturesOfType (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:58398:20)
    at contextuallyCheckFunctionExpressionOrObjectLiteralMethod (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:78068:44)
    at checkFunctionExpressionOrObjectLiteralMethod (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:78059:5)
    at checkExpressionWorker (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:79990:16)
    at checkExpression (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:79880:32)
    at maybeCheckExpression (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:78830:28)
    at BinaryExpressionStateMachine.onRight (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:78794:16)
    at Array.right (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:27760:30)
    at trampoline (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:27847:42)
    at C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:78722:22
    at checkExpressionWorker (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:80015:16)
    at checkExpression (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:79880:32)
    at checkExpressionStatement (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:82458:5)
    at checkSourceElementWorker (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:85523:16)
    at checkSourceElement (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:85375:7)
    at forEach (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:32:22)
    at checkSourceFileWorker (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:85781:7)
    at checkSourceFile (C:\Users\ryanca\AppData\Roaming\npm\node_modules\typescript\lib\_tsc.js:85741:69)

@RyanCavanaugh RyanCavanaugh added the Bug A bug in TypeScript label Apr 16, 2025
@sandersn sandersn linked a pull request Apr 18, 2025 that will close this issue
@sandersn
Copy link
Member

The binder forgets to check that there is a parent symbol when late-binding assignment declarations, even though late-binding currently requires a parent symbol. More explanation at the PR with a fix: #61593

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug A bug in TypeScript
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants