Модификатор protected в TypeScript

Приватные свойства и методы не наследуются потомками. Иногда, однако, нам нужно, чтобы свойство или метод не были доступны извне, но были унаследованы потомками. В этом случае следует использовать модификатор protected.

Давайте попробуем на практике. Объявим в нашем классе User метод cape как защищенный с помощью модификатора protected:

class User { protected cape(str: string) { return str[0].toUpperCase() + str.slice(1); } }

Сделаем класс Student, наследующий от класса User:

class Student extends User { private name: string; constructor(name: string) { super(); this.name = name; } }

Добавим метод, выводящий имя:

class Student extends User { private name: string; constructor(name: string) { super(); this.name = name; } public showName(): string { return this.name; } }

А теперь используем защищенный метод родителя внутри метода потомка:

class Student extends User { private name: string; constructor(name: string) { super(); this.name = name; } public showName(): string { return this.cape(this.name); // используем метод родителя } }

Создадим объект нашего класса:

let student: Student = new Student('john');

Воспользуемся методом для вывода студента:

console.log(student.showName());

А вот попытка вызвать метод cape снаружи класса приведет к ошибке:

console.log(student.cape('test')); //!! ошибка

Дан следующий класс:

class User { protected name: string; protected surn: string; constructor(name: string, surn: string) { this.name = name; this.surn = surn; } }

Унаследуйте от этого класса класс Employee, который добавит защищенное свойство salary, а также геттеры всех свойств, как своих, так и унаследованных.