我正在使用类似的模式:
class MyClass { }
doSomethingWithClass(MyClass) { }
如果我要使用Flow或TS为我的代码添加输入,我该如何输入?这样的事情不会暗示我期待一个MyClass的实例吗?
doSomethingWithClass(MyClass: MyClass) { }
我想要做的是将构造函数/类传递给工厂模式,但我不知道如何实际输入它。
答案 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());