假设我有一个带有静态方法的父类,该方法返回一个实例,
abstract class AbstractManager {
private static instance: AbstractManager;
constructor() {
AbstractManager.instance = this;
}
public static getInstance(): AbstractManager {
return this.instance
}
}
我有一个扩展父类的子类,
class Manager extends AbstractManager {
constructor() {
super();
}
}
如果我调用Manager.getInstance()
,则返回类型为父级AbstractManager
。
是否可以设置父getInstance()
方法,使其返回子类型?
很明显,我可以向每个返回或强制转换为子类型的子类添加一个getInstance()
,但是如果我有100个子类,则需要编写100次该方法。
尽管我对泛型的了解有限,但我尝试使用泛型的另一种解决方案是
public static getInstance<T extends AbstractManager>(): T {
return this.instance;
}
但这已导致错误Type 'AbstractManager' is not assignable to type 'T'.
是否可以进行设置
Manager.getInstance() // is of type Manager not AbstractManager.
还是应该以其他方式解决此问题?谢谢。
答案 0 :(得分:1)
您的getInstance
方法是AbstractManager
类的静态方法,它对实例化的类不执行任何操作。删除static
。
您也不需要instance
成员。
abstract class AbstractManager {
constructor() {
}
public getInstance(): this {
return this
}
}
class Manager extends AbstractManager {
managerTalk() {
console.log("Hello I am Manager");
}
constructor() {
super();
}
}
const manager = new Manager();
const instance = manager.getInstance();
console.log(manager.getInstance()) // <--Manager
manager.managerTalk();
instance.managerTalk();