Typescript:使父类中的公共方法成为派生类中的私有/受保护方法



我有下面这个类和一些public方法:

class A {
public methodOne() {}
public methodTwo() {}
}

我有一个扩展了上面的类。

class B extends A {}

如何使类A中的publicmethodOnemethodTwo变成类B中的privateprotected

/*--- Expectation ---*/
const a = new A();
const b = new B();
a.methodOne(); //OK
b.methodOne(); //Error!

你无法做到这一点。这将使B存在于一个边缘地带,声称它与a兼容(因为它扩展了a(,但也与a不兼容(因为他与a没有相同的公共属性(。

以下功能应该完全可以编写:

function doStuff(param: A) {
param.methodOne();
}

但子类化的好处之一是多态性。doStuff函数不需要担心它是被传递了一个A,还是被传递了从A扩展的东西。Typescript支持这一点,因此将把以下两行都视为完全可以(如果B从A扩展(:

doStuff(new A())
doStuff(new B())

要做到这一点,B必须具有与A相同的所有属性。它可能拥有更多,但不能拥有更少。

如果你不想拥有与A相同的属性,那么我建议不要从它扩展。

最新更新