Расширение интерфейсов в ООП в TypeScript

Интерфейсы в TypeScript могут наследовать друг от друга. Такое взаимодействие называется расширением интерфейсов. Давайте посмотрим на примере. Пусть у нас есть интерфейс ISize:

typescriptinterface ISize {
  height: number;
  width: number;
}

Сделаем интерфейс IStyle, который будет расширять ISize:

typescriptinterface IStyle extends ISize {
  color: string;
}

Теперь давайте создадим класс Figure, реализующий интерфейс IStyle. Наш класс должен будет реализовать как свойство самого интерфейса, так и его родителя. Сделаем это:

typescriptclass Figure implements IStyle {
  height: number;
  width: number;
  color: string;
  
  constructor(height: number, width: number, color: string) {
    this.height = height;
    this.width  = width;
    this.color  = color;
  }
}

Проверим работу:

typescriptlet fig = new Figure(130, 200, 'green');
console.log(fig);
Задание 1

Создайте интерфейс IProgrammer со свойствами salary и language. Пусть данный интерфейс наследует IUser со свойствами name, birthday.

Задание 2

Сделайте класс Employee, который реализует IProgrammer.