【问题标题】:Typescript Class inference打字稿类推断
【发布时间】:2019-09-20 22:06:57
【问题描述】:

有谁知道如何在抽象通用类中获取当前类?如何像“CurrentClass”类型一样引用当前类而不仅仅是抽象类?

原因:我正在编写一个小型库,它应该“推断”当前类而不执行“as CurrentClass”

abstract class Super {
  public static create(args: keyof CurrentClass) {}
}

class CurrentClass extends Super {}

// to prevent
CurrentClass.create({} as CurrentClass);

我到处搜索,但找不到答案,那么打字稿甚至可能吗?


this question 会解决它,但不适用于静态函数

更新:this 似乎是我一直在寻找的问题

【问题讨论】:

    标签: typescript type-inference


    【解决方案1】:

    通常的解决方法是添加一个类型参数以从调用中推断目标:

    abstract class Super {
      s = ""
      public static create<T>(this:new (...a: any[]) => T, args: keyof T) {}
    }
    
    class CurrentClass extends Super {
      c = ""
    }
    
    // to prevent
    CurrentClass.create("c"); // ok
    CurrentClass.create("s"); // ok
    

    play

    【讨论】:

    • 但是这个解决方法不会给我抽象超类的键(/类型信息),对吧?
    • @hasezoey 肯定会,这来自继承.. 在示例中,我添加了来自 Super 和 CurentClass 的键。如果您不想要 Super 的密钥,可以使用 Exclude
    • 我的意思是在创建函数中我不会有 super 的类型,因为我在那里看不到“扩展”或赋值
    • @hasezoey 根据您的需要,该解决方案有多种变体。如果您需要访问 super 的实例成员,您可以使用create&lt;T extends Super&gt;。您将无法访问 Super 的静态数据,但如果我们将类型复杂化一点,您就可以访问它们。如果您遇到具体问题,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 2021-06-08
    • 2018-08-12
    • 1970-01-01
    • 2020-04-02
    • 2020-12-20
    • 2016-08-03
    • 2019-04-10
    相关资源
    最近更新 更多