In the following code Typescript compiler says property 'doit' does not exist on type 'never'. Could this be a compiler bug?
class X {
public foo(): void {
if (this instanceof Y) {
} else {
this.doit();
}
}
private doit(): void {
}
}
class Y extends X {
}
I found the following workaround:
const temp = (this instanceof Y);
if (temp) {
} else {
this.doit();
}
The compiler does not have any issues with this equivalent code, which again leads me to suspect there is a compiler bug here.
Yeah, it seems to be a bug: InstanceOf incorrectly narrow when two type extends same base class.
But, regardless, what is the point of what you're doing?
If you want foo
to behave differently in instances of Y
then why not override it in Y
:
class Y extends X {
public foo(): void {
...
}
}
And if doit
is only needed in Y
instances it should be in Y
, if it's needed in both it can be protected in X
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With