-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Extending a class method with prototype assignment confuses the compiler about membership type #22895
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
Comments
Fix is up at #22935 |
@sandersn using the nightly I'm still getting the error |
I see, it looks like it breaks going the other direction, when the base uses prototype assignment. I’ll take anothe look. |
Well, actually it turns out that it's the arrow function being used as a method. This is ... weird, but technically correct as long as the author remembers that |
Note that I think the right thing is to prefer understanding existing code, since we hope people with write new code in Typescript. They will, at least, have years of experience lowering their expectations of the correctness of any new Javascript that they write. |
OK, the fix is merged. @mohsen1 can you try |
Thank you for prompt response @sandersn! |
Still seeing this error with latest TS nightly. Run https://github.com/mohsen1/webpack/tree/bd1c827c884d943f68bbbf00cd91003875ae0bb2 sample:
|
Yikes! OK, the problem this time is that the initialisers on the base aren't methods at all. They are Upon re-reading the override checking code, it seems that the intent of the error is to prevent instance vs property confusion like this: class Super {
constructor() {
this.p = () => 1
}
}
class Sub extends Super {
p() { return 2 }
}
console.log(new Sub().p()) // 1 ???!!!?
class Base {
get x() { return 1 }
}
class Derived extends Base { }
Derived.prototype.x = 2
console.log(new Derived().x) // 1 ??/?? it keeps happening So "isMethodLike" should really be "isPrototypeProperty" but the compiler is not very good at tracking this distinction. Fortunately, for Javascript special assignments, we can just look at the left-hand-side of the assignment. I'll go make that change. |
OK, #23137 improves the |
This is an issue I encountered when working on webpack/webpack#6862
Bug Repository
See the bug repo for complete code
https://github.com/mohsen1/ts-bug-instance-member
Run
npm test
to run the testExpected behavior:
No Error
Actual behavior:
The text was updated successfully, but these errors were encountered: