【问题标题】: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 得到了我正在寻找的答案。干杯。

标签: javascript class typescript types flowtype


【解决方案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)

【讨论】:

    猜你喜欢
    • 2022-08-11
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多