我需要强制类实现一些方法,例如onCreate()
,就像其他语言一样,php
我们可以看到类似的东西:
<?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)
}
}
?>
请注意,在我的示例中,如果我没有实现onWalk()
代码将无效,您将收到错误,但是当我在TypeScript
中执行相同操作时如下:
// 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);
}
}
没有错误会显示我是否实现了on walk方法,但如果我在onWalk()
类中没有实现Animal
,则会出错。我需要与php
中的TypeScript
相同吗?
答案 0 :(得分:16)
您可以使用Animal
关键字声明abstract
类,并在子类中强制使用相同的方法。
abstract class Animal {
abstract speak(): string;
}
class Cat extends Animal {
speak() {
return 'meow!';
}
}
您可以在TypeScript Handbook中找到有关抽象类和方法的更多信息。
答案 1 :(得分:3)
从TypeScript 1.6开始,您现在可以声明类和方法abstract
。例如: -
abstract class Animal {
abstract makeSound(input : string) : string;
}
不幸的是,文档还没有赶上 https://github.com/Microsoft/TypeScript/blob/v2.6.0/doc/spec.md#8-classes