如何键入类或构造函数

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没有任何额外的类或构造函数或者注入

使用构造函数scala上的模式匹配键入不匹配

C# 结构体

如何在 Visual Studio 2008 中键入“:”时禁用自动缩进

扩展1