如何使用默认方法行为解决问题?

时间:2018-10-14 01:40:34

标签: typescript

为说明我的问题,我将代码简化如下:

class Animal {}

class Cat extends Animal {
  talk() {
    console.log('meow')
  }
}

class Tiger extends Animal {
  talk() {
    console.log('roar')
  }
}

所以这段代码是这样的:

const cat = new Cat()
cat.talk() // outputs meow
const tiger = new Tiger()
tiger.talk() // outputs roar

但是,如果这样做,我显然会遇到问题,因为该方法不存在:

const animal = new Animal()
animal.talk() // error

我希望所有动物都有一种说话方法,但是我不想在Animal类中定义一个说话方法,因为我不知道任何特定动物会发出什么样的声音。例如,我不能说所有动物都在基类中吠叫。

关于如何处理此问题的任何想法?谢谢

1 个答案:

答案 0 :(得分:1)

  

我希望所有动物都拥有一种说话方法,但我不想在Animal类中定义一个方法

在Typescript 1.6或更高版本上,您可以将Animal类定义为抽象类,如下所示:

abstract class Animal {
    abstract talk(): void;
}

如果您不想将Animal定义为完全抽象,则只需为其提供一个抽象方法:

class Animal {
    abstract talk(): void;
}