【问题标题】:Access prototype from generic从泛型访问原型
【发布时间】:2017-08-18 14:13:59
【问题描述】:

具有诸如class Foo<A> {} 之类的泛型的类是否可以访问A 的原型或在A 上使用类型保护,或仅基于A 的类型运行任何类型的逻辑 -没有向Foo 的构造函数提供类、接口或实例(即Foo 没有构造函数或构造函数不接受A 类型的参数)?

关于访问构造函数有几个答案,例如Generic Type Inference with Class Argument,但我只对根据类型运行不同的逻辑感兴趣,而不是实例化它的新实例。

具体来说,我想知道A.prototype上面是否定义了某个方法。

【问题讨论】:

    标签: typescript generics


    【解决方案1】:

    如果您的目标是只允许具有特定功能的 A 类,您也可以将扩展机制与泛型一起使用,如下所示:

    interface B {
       myMandatoryFunction()
    }
    
    class Foo<A extends B> {
       //...
    }
    

    如果您的 Generic 类中的操作基于 A 在其原型上是否具有函数,您将必须实例化一个 A 对象并查看它的原型,因为 Typescript 键入只涉及编译和检查类型代码执行期间对象的处理与 js 中的 instanceof 方法完全相同,因此不适用于类型

    【讨论】:

    • "将不得不实例化 A 对象" - 所以唯一的方法是如果 A 的实例作为参数传递给 Foo?
    猜你喜欢
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2015-12-01
    相关资源
    最近更新 更多