TypeScript: сделать методы publi c в родительском классе закрытыми / защищенными методами в производном классе - PullRequest
0 голосов
/ 05 августа 2020

У меня есть следующий класс с некоторыми public методами:

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

И у меня есть класс, который расширяет предыдущий.

class B extends A {}

Как я могу сделать methodOne и methodTwo, которые являются public в классе A, становятся private или protected в классе B?

/*--- Expectation ---*/

const a = new A();
const b = new B();

a.methodOne(); //OK
b.methodOne(); //Error!

1 Ответ

4 голосов
/ 05 августа 2020

Вы не можете этого сделать по замыслу. Это приведет к тому, что B будет существовать в подвешенном состоянии, где, как утверждается, он совместим с A (поскольку он расширяет A), но также несовместим с A (поскольку он не имеет тех же свойств publi c, что и A).

Следующая функция должна быть вполне подходящей для написания:

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

Но одним из преимуществ создания подклассов является полиморфизм. Функция doStuff не должна беспокоиться о том, было ли ей передано что-то, что в буквальном смысле является A, или вместо этого было передано что-то, что происходит от A. Typescript поддерживает это, и поэтому будет рассматривать обе следующие строки как совершенно нормально (если B расширяется от A):

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

Для того, чтобы это работало, B должен иметь все те же свойства, что и A. У него может быть больше, но не может быть меньше.

Если вы не хотите иметь те же свойства, что и A, я рекомендую не расширять его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...