如何从超类方法而不是超类类型返回子类型

亚历山大·米尔斯

我认为这是正确实现泛型的问题,但我不确定。

我在这里创建了一个代表问题的Github要点:https : //gist.github.com/ORESoftware/66b72b4b85262d957cb03ad097e4743e

说我有这个超类:

  class A {

    foo(): A {
      return this;
    }

  }

和几个子类,例如一个看起来像这样:

   class B extends A {

     bar(): B {
      return this;
     }

   }

所以如果我这样做

new B().foo().bar()

这将在运行时工作,但不能与TypeScript一起编译这是因为foo()将返回类型声明为A,而不是type B

我该如何返回类型this,而不是声明foo()始终返回type A

我尝试了这个:

在此处输入图片说明

但是我得到这个错误:

在此处输入图片说明

肖恩·范登·博加德

您必须返回this使用多态此类型的类型

abstract class A {
    foo(): this {
        return this;
    }
}

class B extends A {
    bar(): this {
        return this;
    }
}

这将允许

const b = new B();

b.foo().bar();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回子类作为超类的类型

超类类型对象的子类的构造方法?

如何使超类方法返回子类的实例

如何定义方法的返回类型是超类的实现

Swift:从超类返回子类类型的对象数组

从函数而不是子类返回通用超类

超类类型的对象无法访问子类的方法

从 Java 中超类类型的 ArrayList 调用子类方法

对子类实例使用超类类型

如何将子类称为超类类型

Kotlin类型,子类型和超类型与类,子类和超类

当引用为超类类型时,子类无法访问超类的受保护方法

如何确定泛型超类的特定子类的ACTUAL返回类型?

如何使用子类或超类定义Java函数的返回类型和参数?

调用超类方法而不是子类方法

斯威夫特:如何让具有子类返回类型的函数符合将超类定义为返回类型的协议?

在PHPStorm中,当我有一个超类方法返回每个子类的不同类型时,如何使类型提示起作用

如何使子类自动调用超类方法

如何从 Python 中现有的超类类型对象实例化子类类型变量

如果我有超类类型的集合,如何获得特定子类类型的所有项?

如何在将返回类型Subclass的超类中创建方法

__add__返回超类而不是子类的实例

从超类调用子类方法

子类和超类方法

在抽象超类中使用子类的泛型类型?

将子类实例化为超类类型有什么优势?

C# - 在子类中指定超类的类型参数?

扩展到BigDecimal的类从超类类型返回对象

java泛型-如何在知道子类类型和超类的情况下调用子重载方法