Модификатори 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-ро илова мекунад, инчунин геттерҳои ҳамаи хусусиятҳоро, ҳам худӣ ва ҳам меросгирифташуда.