我正在使用TypeScript中的extends
约束,如下所示:
class Animal {}
class Lion extends Animal {}
class Bear extends Animal {}
class ZooKeeper<T extends Animal> {
constructor(p: T = new Animal()) {
}
}
new ZooKeeper(new Animal());
但是p: T = new Animal()
包含一个错误:
类型“Animal”不能赋值给类型“T”。
构造函数Animal(): Animal
为什么,我该怎么做,才能在Animal
子类型的位置使用Animal
?
<T>
/as T
不是强制类型转换,而是类型断言。它告诉编译器“即使它不是,也将动物视为类型 T”。例如,以下代码将失败:new ZooKeeper<Lion>().getAnimal().someLionMethod(),因为我们得到的动物实际上不是狮子,而是 Animal 类的一个实例。 - LukeSw