2016-03-20 92 views
2

我需要強制類來實現一些方法,例如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); 

    } 

} 

沒有錯誤會顯示我是否做了或沒落實該如果我沒有在Animal類中實現onWalk(),那麼它會給出錯誤,我需要與php中的TypeScript相同?

回答

8

你可以聲明Animal類的abstract關鍵字和同爲你想在子類來強制方法。

abstract class Animal { 
    abstract speak(): string; 
} 

class Cat extends Animal { 
    speak() { 
     return 'meow!'; 
    } 
} 

你可以找到更多信息有關抽象類和方法在TypeScript Handbook

+2

非常感謝很多..我花了幾天尋找解決方案。 –