Class 作为实例 vs Class 定义 |打字稿

Class as instance vs Class definition | Typescript

默认情况下,typescript 正确地将 class 类型推断为上述 class 的 实例 而不是 class 定义本身。我最近在重构 class 工厂方法时遇到了这种区别。

我的问题是什么是指示参数或类型是 class 的实例或 [=46= 的 callable 定义的最佳方式]?

以这个为例class

class MyClass implements IMyClass {
  foo = 'foo';
  bar() {
    return 'bar';
  }
}

现在我有两个函数,第一个 callBar 需要一个 class

的实例
function callBar(instance: MyClass) {
  return instance.bar();
}

第二个 classFactory 需要 class 定义。

function classFactory(MyClassDefinition: MyClass) {
  return new MyClassDefinition();
}

问题是第二个函数抛出类型错误

(parameter) MyClassDefinition: MyClass
This expression is not constructable.
  Type 'MyClass' has no construct signatures.(2351)

我采用的解决方案是使用 utility-types npm 包中的 Class 类型。定义为...

type Class<T> = new (...args: any[]) => T;

function classFactory(MyClassDefinition: Class<MyClass>) {
  return new MyClassDefinition();
}

是否有更清晰、更好或更简单的方法来进行这种区分?

谢谢!

您需要将其指定为构造函数类型:

function classFactory(MyClassDefinition: new () => MyClass) {
  return new MyClassDefinition();
}