Мадыфікатар 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, а таксама геттеры ўсіх уласцівасцей, як сваіх, так і ўспадкоўваных.