我有一个动物医院,有一系列兽医,每个兽医专门研究一个特定的动物。
interface Animal {}
class Dog implements Animal {}
class Cat implements Animal {}
class Vet<T extends Animal> {
waitingList: T[];
}
class Hospital {
vets: Vet[]
}
我收到TypeScript 2.6的错误,因为Hospital.vets缺少它的通用类型。为什么是这样?理论上,兽医阵列中的每个兽医都可能会照顾不同类型的动物。作为一个医院,我所知道的是每个兽医必须满足约束。
答案 0 :(得分:1)
您需要指定数组项的泛型参数。您可以使用基类Animal
interface Animal {}
class Dog implements Animal { }
class Cat implements Animal { }
class Vet<T extends Animal> {
waitingList: T[];
}
class Hospital {
vets: Vet<Animal>[] = [ new Vet<Dog>(), new Vet<Cat>() ]
}
只是一句警告,取决于你如何使用它,它可能会让一些错误通过类型检查器:
new Hospital().vets[0].waitingList.push(new Cat())
在上面的示例中,new Hospital().vets[0]
是Vet<Dog>
,但由于我们使用Vet<Animal>
,因此我们也可以推送Cat
,这可能会导致运行时错误。