默认情况下,打字稿正确地将类类型推断为所述类的实例,而不是类definition本身。我最近在重构类工厂方法时遇到了这种区别。
我的问题是,表明参数或类型是类的实例还是类的[[callable定义的最佳方法是什么?
以此类为例class MyClass implements IMyClass {
foo = 'foo';
bar() {
return 'bar';
}
}
现在我有两个功能,第一个callBar
需要该类的实例
function callBar(instance: MyClass) { return instance.bar(); }
第二个classFactory
需要类定义。
function classFactory(MyClassDefinition: MyClass) { return new MyClassDefinition(); }
问题是此第二个函数引发类型错误
(parameter) MyClassDefinition: MyClass This expression is not constructable. Type 'MyClass' has no construct signatures.(2351)
我求助于的解决方案是使用Class
npm包中的utility-types
类型。定义为...
utility-types
是否有更清晰,更好或更轻松的方法来进行这种区分?谢谢!
type Class<T> = new (...args: any[]) => T;
function classFactory(MyClassDefinition: Class<MyClass>) {
return new MyClassDefinition();
}