【发布时间】:2021-07-28 13:35:47
【问题描述】:
我正在尝试在由多个子类扩展的父类上创建工厂方法。
我想做的是在父级上定义工厂方法,因为它不需要更改,并让它为扩展它的子级返回正确的类型。
这是我想要的一个例子:
class Parent {
constructor(protected foo: string) {}
static create<T extends Parent>(fooProvider: {foo: string}): T {
return this.constructor(fooProvider.foo)
}
}
class Child extends Parent {
logFoo() {
console.log(this.foo);
}
}
const instance = Child.create({foo: 'bar'});
instance.logFoo();
但是,这不起作用,因为“类型 'Parent' 上不存在属性 'logFoo'。(2339)”。
我想我需要一些方法来指定被调用的构造函数方法存在于子类类型上,但我不确定如何。
我想我可以专门输入 if,例如 Child.create<Child>(foo),但这似乎是多余的。如果 TypeScript 可以推断出这种类型,那就最好了。
类泛型参数也不起作用,因为这是一个静态方法。
我已经检查了Typescript return type of factory method in base class,这是相似的,但是正在尝试解决对我不起作用的不同用例。
【问题讨论】:
标签: typescript