如何键入类或构造函数
Posted
技术标签:
【中文标题】如何键入类或构造函数【英文标题】:How to type a Class or Constructor 【发布时间】:2018-09-22 17:53:59 【问题描述】:我正在使用与此类似的模式:
class MyClass
doSomethingWithClass(MyClass)
如果我要使用 Flow 或 TS 在我的代码中添加输入,我将如何输入?这样的事情不是暗示我期待一个 MyClass 的实例吗?
doSomethingWithClass(MyClass: MyClass)
我想做的是将构造函数/类传递给工厂模式,但我不知道如何实际键入它。
【问题讨论】:
你想要一个通用的工厂模式吗? 基本上。我知道如何添加泛型,但不知道如何正确键入构造函数。 @Titian Cernicova-Dragomir 得到了我正在寻找的答案。干杯。 【参考方案1】:为了将类构造函数传递给函数,您可以使用构造函数签名:
function doSomethingWithClassGeneric<T>(myClass: new () => T)
return new myClass()
doSomethingWithClassGeneric(MyClass);
上面我们使用了一个不带参数的构造函数,但是你可以潜在地要求构造函数的参数存在。
或者您也可以使用typeof MyClass
来接受从MyClass
派生的类以及兼容的构造函数:
class MyClass
class MyClassDerived extends MyClass x!: number
function doSomethingWithClassGeneric<T>(myClass: typeof MyClass)
return new myClass()
doSomethingWithClassGeneric(MyClass);
doSomethingWithClassGeneric(MyClassDerived);
【讨论】:
谢谢。看起来我需要花一些时间在文档中。我正在删除这个问题。干杯。 @Firephp 不确定你应该......它可能对其他人有用【参考方案2】:使用Class<> 实用程序类型。
class MyClass ;
function doSomethingWithClass(klass: Class<MyClass>): void
doSomethingWithClass(MyClass)
【讨论】:
以上是关于如何键入类或构造函数的主要内容,如果未能解决你的问题,请参考以下文章
Junit for java Clock没有任何额外的类或构造函数或者注入