microsoft / microsoft/TypeScript
JSDoc comment on JS class property isn't inherited when derived class also initializes it
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.4k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 117
Description
Bug Report
When a JS class extends another, and members are overridden in the constructor, they will lose all of their documentation - even if they are compatible values.
🔎 Search Terms
jsdoc class es6 js extends
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about JS / JSDoc
⏯ Playground Link
Playground link with relevant code
Note the type info when hovering over this.a in Derived's constructor, or a in the bottom line.
💻 Code
class Base
{
constructor()
{
/** I am an integer! */
this.a = 100;
}
}
class Derived extends Base
{
constructor()
{
super();
this.a = 50;
// hover over this.a above to see the issue
}
}
// hover over a to see the issue as well
new Derived().a
🙁 Actual behavior
a was overridden by Derived, even though it is a type match.
🙂 Expected behavior
While I can see the usefulness here if a was a different/incompatible type entirely, I would rather an error occur on, for instance, this.a = "str"; because a is a number, not a string, and for it to inherit the JSDoc properly. It seems like this.xxx in a constructor declares a new variable, even if it inherits one.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked TypeScript Playground and reproduce the hover behavior for this.a in Derived and new Derived().a. Trace how the JavaScript class constructors and JSDoc comment are interpreted, then verify that compatible overrides retain the documentation and incompatible assignments are diagnosed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100