microsoft / microsoft/TypeScript
TS2377 reported for constructors that unconditionally throw or use return override
Open
Nobody has claimed this yet.
Awaiting More Feedback
Suggestion
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
TypeScript Version:
3.7.0-dev.2019-10-10
Search Terms:
- TS2377
- TS 2377
- TS2377 throw
- TS 2377 throw
Code
Code like this is also generated by webidl2js:
class Foo extends Object {
constructor () {
throw new TypeError("Illegal constructor");
}
}
Same with
class Foo extends Object {
constructor () {
return Object.create(new.target.prototype);
}
}
Expected behavior:
No error
Actual behavior:
error TS2377: Constructors for derived classes must contain a 'super' call.
2 constructor() {
~~~~~~~~~~~~~~~
3 throw new TypeError();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 }
~~~~~
and
error TS2377: Constructors for derived classes must contain a 'super' call.
2 constructor() {
~~~~~~~~~~~~~~~
3 return Object.create(new.target.prototype);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 }
~~~~~
Playground Link:
Related Issues:
- #3696
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 two constructor examples and the linked Playground to reproduce TS2377, then read the related issue #3696 for context. The fix is complete when derived constructors that unconditionally throw or return an override no longer report TS2377, while the existing diagnostic remains for constructors that still require a super call.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100