首页 文章

在打字稿中依赖注入抽象类

提问于
浏览
0

我是打字稿的新手,我正在尝试使用依赖注入来创建扩展基本抽象UIObject类的UI对象,但是我遇到错误'无法创建抽象类的实例'

这是一个简化的例子:

abstract class UIObject {
// Some methods
}

class Cursor extends UIObject {
// Some other methods
}

function create (UIObjectClass: typeof UIObject){
  return new UIObjectClass()
}

我想要的是create function能够将任何扩展UIObject的类作为参数,并创建该类的实例 . 但是因为UIObject是一个抽象类,所以这不起作用,因为你无法实例化一个抽象类 .

这样做的最佳方法是什么?

1 回答

  • 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 .

相关问题