如何声明class
类型,以确保该对象是常规类的构造函数?
在以下示例中,我想知道应该为AnimalClass
赋予哪种类型,以便它可以是Penguin
或Lion
:
class Animal {
constructor() {
console.log("Animal");
}
}
class Penguin extends Animal {
constructor() {
super();
console.log("Penguin");
}
}
class Lion extends Animal {
constructor() {
super();
console.log("Lion");
}
}
class Zoo {
AnimalClass: class // AnimalClass could be 'Lion' or 'Penguin'
constructor(AnimalClass: class) {
this.AnimalClass = AnimalClass
let Hector = new AnimalClass();
}
}
当然,
class
类型不起作用,无论如何它都太笼统了。 最佳答案
我不确定最初问这个问题时是否可以在TypeScript中实现,但是我的首选解决方案是使用泛型:
class Zoo<T extends Animal> {
constructor(public readonly AnimalClass: new () => T) {
}
}
这样,即使在TypeScript智能感知中,变量
penguin
和lion
也会推断出具体的类型Penguin
或Lion
。const penguinZoo = new Zoo(Penguin);
const penguin = new penguinZoo.AnimalClass(); // `penguin` is of `Penguin` type.
const lionZoo = new Zoo(Lion);
const lion = new lionZoo.AnimalClass(); // `lion` is `Lion` type.