First things first: a word of caution – do this only if you absolutely have to. TypeScript has these checks for a reason, and probably in 99% of the cases you should respect and abide these restrictions. But if your scenario falls within the 1% where you must in a subclass override a private method of a superclass – this post shows a way to do this.
Let’s say we have a class that defines a generic starship, and what happens to it when it’s hit by a weapon:
type Hit = 'phaser' | 'antimatter spread' | 'photon torpedo' class Starship { private totalDamage: number; constructor(private shipName: string) { this.totalDamage = 0; } private addDamage(damage: number) { this.totalDamage += damage; } public isHitBy(hit: Hit) { console.log(`${this.shipName} is hit by ${hit}!`) switch(hit) { case 'phaser': this.addDamage(100); break; case 'antimatter spread': this.addDamage(300); break; case 'photon torpedo': this.addDamage(500); break } } }
You can create your own class of starship based on this generic class, then build a ship of the new class, and simulate it being hit by a weapon: Continue reading →