我是Typescript的新手,我试图使用依赖注入来创建扩展基本抽象UIObject类的UI对象,但遇到了“无法创建抽象类实例”错误
这是一个简化的示例:
abstract class UIObject {
// Some methods
}
class Cursor extends UIObject {
// Some other methods
}
function create (UIObjectClass: typeof UIObject){
return new UIObjectClass()
}
我想要的是create函数,它能够将扩展UIObject的任何类作为参数,并创建该类的实例。但是,由于UIObject是抽象类,因此无法使用,因为您无法实例化抽象类。
做到这一点的最佳方法是什么?
答案 0 :(得分:1)
首先,您需要确保create
接受一个类,而不是一个实例。
interface Constructable {
new (...args: any[]): any;
}
function create<T extends Constructable>(UIObjectClass: T): InstanceType<T> {
return new UIObjectClass();
}
这将使TypeScript仅接受具体的类。
create(UIObject); // Error! Can't use an abstract class here.
create(Cursor); // OK
create(new Cursor()); // Error! We should be passing a class, not an instance.
我还没有找到一种方法来确保自变量UIObjectClass
继承自UIObject
。