我正试图按照关于在泛型中使用类类型的文档中的示例制作一个工厂方法,但我无法使其工作。
下面是我尝试做的一个最简单的例子:
class Animal {
legCount = 4;
constructor(public name: string) { }
}
class Beetle extends Animal {
legCount = 6;
}
const animalFactory = <T extends Animal>(animalClass: new () => T, name: string): T => {
return new animalClass(name);
}
const myBug = animalFactory(Beetle, 'Fido');
然而,我得到以下错误:
error TS2554: Expected 0 arguments, but got 1.
return new animalClass(name);
~~~~
---
error TS2345: Argument of type 'typeof Beetle' is not assignable to parameter of type 'new () => Beetle'.
Types of construct signatures are incompatible.
Type 'new (name: string) => Beetle' is not assignable to type 'new () => Beetle'.
const myBug = animalFactory(Beetle, 'Fido');
~~~~~~
我还尝试了文档中提到的类类型的替代语法;
animalClass: { new (): T }
–但无济于事。
我看不出这件事哪里不对。。。
当您添加构造函数签名n: string
时,它会起作用。
const animalFactory = <T extends Animal>(animalClass: {new (n: string): T}, name: string): T => {
return new animalClass(name);
}