【问题标题】:Abstract class that requires abstract property需要抽象属性的抽象类
【发布时间】:2021-03-26 03:48:11
【问题描述】:

我正在使用这些双重抽象类,并且我试图要求第二个抽象类具有另一个抽象类的属性。但它失败了。

abstract class Static<C extends {[key: string]: any}> {
    abstract doughnut: boolean
}

class AlphaStatic extends Static<{ love: true }> {
    doughnut = true
}

abstract class Dynamic<C extends {[key: string]: any}> {
    abstract static: Static<C>
}

class AlphaDynamic extends Dynamic<{ love: true }> {
    static = AlphaStatic
}

Playground

我该如何解决这个问题?

“AlphaDynamic”类型中的属性“静态”不能分配给基类型“动态”中的相同属性'。 'typeof AlphaStatic' 类型中缺少属性'doughnut',但在'Static'.ts(2416) Untitled-2(2, 14): 'doughnut' 在这里声明。

【问题讨论】:

  • 您的意思是static: AlphaStatic?截至目前,您正在为 static 分配 AlphaStatic,而不是其中的一个实例。
  • 是的,我想我想要新的 AlphaStatic()
  • 如果你希望属性的值实际上是一个类,而不是一个实例,那么类型应该是new (...args: any[]) =&gt; Static&lt;C&gt;
  • @kaya3 很高兴知道可能想要那个
  • abstract doughnut: boolean -- 抽象数据属性的含义是什么?

标签: typescript


【解决方案1】:

缺少“新”

abstract class Static<C extends {[key: string]: any}> {
    abstract doughnut: boolean
}

class AlphaStatic extends Static<{ love: true }> {
    doughnut = true
}

abstract class Dynamic<C extends {[key: string]: any}> {
    abstract static: Static<C>
}

class AlphaDynamic extends Dynamic<{ love: true }> {
    static = new AlphaStatic()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2010-09-24
    相关资源
    最近更新 更多