如何键入类或构造函数

时间:2018-04-12 14:15:28

标签: javascript class typescript types flowtype

我正在使用类似的模式:

class MyClass { }

doSomethingWithClass(MyClass) { }

如果我要使用Flow或TS为我的代码添加输入,我该如何输入?这样的事情不会暗示我期待一个MyClass的实例吗?

doSomethingWithClass(MyClass: MyClass) { } 

我想要做的是将构造函数/类传递给工厂模式,但我不知道如何实际输入它。

2 个答案:

答案 0 :(得分:4)

为了将类构造函数传递给函数,您可以使用构造函数签名:

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);

答案 1 :(得分:0)

使用Class<>实用程序类型。

$firebaseUtils.doRemove(firebaseArray.$ref());