【发布时间】:2019-02-14 09:14:37
【问题描述】:
假设我有一个带有返回实例的静态方法的父类,
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.
或者我应该以不同的方式解决这个问题吗?谢谢。
【问题讨论】:
标签: typescript instance subclass