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

Частните свойства и методи не се наследяват от потомците. Понякога обаче се налага свойство или метод да не са достъпни отвън, но да бъдат наследени от потомци. В този случай трябва да използваме модификатора protected.

Нека опитаме на практика. Декларирайте в вашия клас User метод cape като защитен с помощта на модификатора protected:

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

Нека направим клас Student, който наследява от клас User:

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

Нека добавим метод, който извежда името:

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

А сега нека използваме защитения метод на родителя вътре в метода на потомка:

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

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

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

Нека използваме метода за извеждане на студента:

typescriptconsole.log(student.showName());

Но опитът да извикаме метода cape отвън класа ще доведе до грешка:

typescriptconsole.log(student.cape('test')); // грешка
Задание 1

Даден е следният клас:

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

Наследете от този клас клас Employee, който ще добави защитено свойство salary, както и гетъри за всички свойства, както собствени, така и наследени.