Перейти к основному содержимому
Модуль 4 · Урок 1 из 27/14 в курсе~15 min
Уроки модуля (1/2)

Классы и модификаторы

TypeScript расширяет стандартные классы ES6 мощными функциями объектно-ориентированного программирования (ООП), такими как статическая типизация, модификаторы доступа и сокращенные свойства параметров.

Классы и модификаторы доступа

В TypeScript вы можете управлять видимостью членов, свойств и методов класса, используя три основных ключевых слова:

  • public (по умолчанию): элемент доступен откуда угодно.
  • private: элемент доступен только внутри класса, который его определяет.
  • protected: член доступен внутри класса и его подклассов (наследование).
TS
class Animal {
  public name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public getAge(): number {
    return this.age;
  }
}

Свойства параметра

TypeScript предлагает сокращенный синтаксис для объявления и инициализации члена класса непосредственно в конструкторе. При добавлении к параметру конструктора модификатора доступа свойство автоматически создается и назначается:

TS
// This syntax does exactly the same as the previous example!
class Animal {
  constructor(
    public name: string,
    private age: number,
  ) {}
}

Реализация интерфейсов

Класс может реализовать один или несколько интерфейсов, используя ключевое слово implements. Это гарантирует, что класс придерживается определенного контракта, определяя все необходимые методы и свойства:

TS
interface Flyable {
  fly(altitude: number): void;
}

class Bird implements Flyable {
  constructor(public name: string) {}

  fly(altitude: number): void {
    console.log(`${this.name} is flying at ${altitude} meters.`);
  }
}

Наследование и super

TypeScript полностью поддерживает наследование классов. Класс может расширять другой класс, используя ключевое слово extends. Если подкласс определяет конструктор, он должен вызвать конструктор базового класса с помощью функции super() перед доступом к this:

TS
class Person {
  constructor(public name: string) {}
}

class Student extends Person {
  constructor(
    name: string,
    public grade: number,
  ) {
    super(name); // Calls the Person constructor
  }
}

Попробуйте сами

Упражнение 1. Класс автомобиля и модификатор Private

Упражнение#ts.m4.l1.e1
Попыток: 0Загрузка…

Объявите класс с именем Car. Он должен иметь свойство модели только для чтения (строку), определенное в конструкторе, частное свойство пробега (число), инициализированное значением 0, общедоступный метод disk(miles:number): void, который увеличивает пробег на мили, а также геттер или метод getMileage(): число, возвращающее пробег.

Загрузка редактора…
Показать подсказку

Использовать личный пробег: число = 0; чтобы сделать переменную частной, и конструктор (публичная модель только для чтения: строка) {} как сокращение.

Решение доступно после 3 попыток

Упражнение 2. Интерфейс формы и класс круга

Упражнение#ts.m4.l1.e2
Попыток: 0Загрузка…

Завершите код, реализовав класс Circle, реализующий интерфейс Shape. Класс должен иметь свойство радиуса (номер), доступное только для чтения, установленное через конструктор, и реализовывать getArea(): число (возвращающее Math.PI * radius * radius).

Загрузка редактора…
Показать подсказку

Use реализует Shape в классе Circle и определяет метод getArea(): Number.

Решение доступно после 3 попыток

Упражнение 3. Абстрактный класс транспортного средства и подкласс мотоцикла

Упражнение#ts.m4.l1.e3
Попыток: 0Загрузка…

Объявите класс Motorcycle, который расширяет абстрактный класс Vehicle. Он должен реализовать метод start() для возврата строки «Мотоцикл», за которой следуют make (this.make) и «started».

Загрузка редактора…
Показать подсказку

Используйте класс Motorcycle, расширяющий Vehicle, и реализуйте строковый метод start():, который возвращает правильную строку.

Решение доступно после 3 попыток

Упражнение 4. Свойства параметров и наследование

Упражнение#ts.m4.l1.e4
Попыток: 0Загрузка…

Создайте класс с именем «Сотрудник», который определяет идентификатор (число) свойства, доступного только для чтения, и имя общедоступного свойства (строка), используя сокращенную версию конструктора. Затем создайте класс Developer, который расширяет класс «Сотрудник» и добавляет через конструктор отдел общедоступной собственности (строку).

Загрузка редактора…
Показать подсказку

Используйте super(id, name) в конструкторе разработчика и используйте public Department для определения свойства через конструктор.

Решение доступно после 3 попыток