班级' B'错误地扩展基类' A' (两个私有方法命名相同)

时间:2018-02-16 15:20:26

标签: javascript typescript

我收到错误

  

班级' B'错误地扩展基类' A'。
  类型具有私有财产'方法'。

的单独声明
abstract class A {
  private method() {}
}

abstract class B extends A {
  private method() {}
}

当注释掉类A中的方法时,错误就会消失。如果有两个名为相同的私有方法,我该怎么办?

2 个答案:

答案 0 :(得分:3)

由于Typescript位于Javscript之上,并且Javascript不允许继承的类为函数提供不同的私有实现(所有函数最终都会在类的prototype上),因此Typescript不会允许你这样做。

如果允许这样做,您将基本上覆盖私有成员method,并且由于它被标记为私有,因此可能不会用于公共消费/覆盖。

如果您将其声明为public / protected

,则可以覆盖该函数
abstract class A {
    protected method() { }
}

abstract class B extends A {
    protected method() { }
}

或者如果你真的想要覆盖私有方法,你可以执行以下操作,虽然私有方法由于某种原因被标记为私有,但最好避免这种情况:

class B extends A {

}
(B.prototype as any)['method'] = function(this: B) {
}

答案 1 :(得分:0)

这一切都很奇怪,但如果你真的需要,试试这个:

class Foo {
    private go() {
    }
}

class Bar extends Foo {
    constructor() {
        super();
        this["go"] = this.foo;
    }

    private foo() {

    }
}