Skip to content

checker.getSuggestionDiagnostics fails with TypeError: Cannot read properties of undefined (reading 'parent') #61314

Open
@vdiez

Description

@vdiez

🔎 Search Terms

tsc: "Cannot read properties of undefined (reading 'parent')" getThisType getSuggestionDiagnostics

🕗 Version & Regression Information

  • This changed between versions ______ and _______
  • This changed in commit or PR _______
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________
  • I was unable to test this on prior versions because _______

⏯ Playground Link

No response

💻 Code

I have an ESLint rule where I'm getting the TS diagnostics to report deprecations.

While linting a project with JS code, the rule crashes. I managed to get the very minimum reproducer with a TS program with this file:

//test.js
/**
 * @param {String}
 * @return {this}
 */
Foo.prototype.on = function(type) {
  return this;
};

and a tsconfig.json with the following contents:

{
	"compilerOptions": {
		"allowJs": true,
		"noImplicitAny": true
	},
	"files": ["test.js]
}
const sourceFile = program.getSourceFile('test.js');
const diagnostics: ts.DiagnosticWithLocation[] = checker.getSuggestionDiagnostics(sourceFile);

🙁 Actual behavior

It crashes with error:

TypeError: Cannot read properties of undefined (reading 'parent')
    at eval (eval at getThisType (C:\projects\test\node_modules\typescript\lib\typescript.js:66507:7), <anonymous>:1:35)
    at getThisType (C:\projects\test\node_modules\typescript\lib\typescript.js:66507:7)
    at getTypeFromThisTypeNode (C:\projects\test\node_modules\typescript\lib\typescript.js:66518:28)
    at getTypeFromTypeNodeWorker (C:\projects\test\node_modules\typescript\lib\typescript.js:66586:16)
    at getTypeFromTypeNode (C:\projects\test\node_modules\typescript\lib\typescript.js:66552:41)
    at getReturnTypeFromAnnotation (C:\projects\test\node_modules\typescript\lib\typescript.js:63200:14)
    at checkFunctionExpressionOrObjectLiteralMethodDeferred (C:\projects\test\node_modules\typescript\lib\typescript.js:82410:24)
    at checkDeferredNode (C:\projects\test\node_modules\typescript\lib\typescript.js:89929:9)
    at Set.forEach (<anonymous>)
    at checkDeferredNodes (C:\projects\test\node_modules\typescript\lib\typescript.js:89907:27)

🙂 Expected behavior

When I remove the JSDoc or I extend the prototype of a known object, this does not crash. I would expect checker.getSuggestionDiagnostics(sourceFile) to return an empty array.

Additional information about the issue

No response

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScript

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions