I need to force the class to implement some method for example onCreate()
, as in other languages like php
we can see something like:
<?php
// Declare the interface 'Movement'
interface MovementEvents
{
public function onWalk($distance);
}
// Declare the abstract class 'Animal'
abstract class Animal implements MovementEvents{
protected $energy = 100;
public function useEnergy($amount){
$energy -= $amount;
}
}
class Cat extends Animal{
// If I didn't implement `onWalk()` I will get an error
public function onWalk($distance){
$amount = $distance/100;
$this->useEnergy($amount)
}
}
?>
Note that in my example if I didn't implement onWalk()
the code will not work and you will get an error but when I do the same in TypeScript
as following:
// Declare the interface 'Movement'
interface MovementEvents
{
onWalk: (distance)=>number;
}
// Declare the abstract class 'Animal'
abstract class Animal implements MovementEvents{
protected energy:number = 100;
public useEnergy(amount:number):number{
return this.energy -= amount;
}
}
class Cat extends Animal{
// If I didnt implment `onWalk()` I will get an error
public onWalk(distance:number):number{
var amount:number = distance/100;
return this.useEnergy(amount);
}
}
No error will show whether I did or didn't implement the on walk method but the it will give an error if I didn't implement onWalk()
in the Animal
class, I need to have same as php
in TypeScript
?
You can declare your Animal
class with the abstract
keyword and same for the method you want to force in the child class.
abstract class Animal {
abstract speak(): string;
}
class Cat extends Animal {
speak() {
return 'meow!';
}
}
You can find more information about abstract classes and methods in the TypeScript Handbook.
As of TypeScript 1.6 you can now declare classes and method abstract
. For example:-
abstract class Animal {
abstract makeSound(input : string) : string;
}
Unfortunately the documentation hasn't caught up yet https://github.com/Microsoft/TypeScript/blob/v2.6.0/doc/spec.md#8-classes
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