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

问题描述 投票:0回答:1

默认情况下,打字稿正确地将类类型推断为所述类的实例,而不是类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

是否有更清晰,更好或更轻松的方法来进行这种区分?

谢谢!

typescript typescript-typings factory-pattern factory-method
1个回答
1
投票
您需要将其表示为构造函数类型:

type Class<T> = new (...args: any[]) => T; function classFactory(MyClassDefinition: Class<MyClass>) { return new MyClassDefinition(); }

© www.soinside.com 2019 - 2024. All rights reserved.