在TypeScript中如何强制继承类来实现一个方法

时间:2016-03-20 12:29:07

标签: class oop typescript

我需要强制类实现一些方法,例如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相同吗?

2 个答案:

答案 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