我收到错误
班级' B'错误地扩展基类' A'。
的单独声明
类型具有私有财产'方法'。
abstract class A {
private method() {}
}
abstract class B extends A {
private method() {}
}
当注释掉类A
中的方法时,错误就会消失。如果有两个名为相同的私有方法,我该怎么办?
答案 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() {
}
}