Уроки модуля (1/2)
Классы и модификаторы
TypeScript расширяет стандартные классы ES6 мощными функциями объектно-ориентированного программирования (ООП), такими как статическая типизация, модификаторы доступа и сокращенные свойства параметров.
Классы и модификаторы доступа
В TypeScript вы можете управлять видимостью членов, свойств и методов класса, используя три основных ключевых слова:
public(по умолчанию): элемент доступен откуда угодно.private: элемент доступен только внутри класса, который его определяет.protected: член доступен внутри класса и его подклассов (наследование).
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 предлагает сокращенный синтаксис для объявления и инициализации члена класса непосредственно в конструкторе. При добавлении к параметру конструктора модификатора доступа свойство автоматически создается и назначается:
// This syntax does exactly the same as the previous example!
class Animal {
constructor(
public name: string,
private age: number,
) {}
}Реализация интерфейсов
Класс может реализовать один или несколько интерфейсов, используя ключевое слово implements. Это гарантирует, что класс придерживается определенного контракта, определяя все необходимые методы и свойства:
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:
class Person {
constructor(public name: string) {}
}
class Student extends Person {
constructor(
name: string,
public grade: number,
) {
super(name); // Calls the Person constructor
}
}Попробуйте сами
Упражнение 1. Класс автомобиля и модификатор Private
Объявите класс с именем Car. Он должен иметь свойство модели только для чтения (строку), определенное в конструкторе, частное свойство пробега (число), инициализированное значением 0, общедоступный метод disk(miles:number): void, который увеличивает пробег на мили, а также геттер или метод getMileage(): число, возвращающее пробег.
Показать подсказку
Использовать личный пробег: число = 0; чтобы сделать переменную частной, и конструктор (публичная модель только для чтения: строка) {} как сокращение.
Решение доступно после 3 попыток
Упражнение 2. Интерфейс формы и класс круга
Завершите код, реализовав класс Circle, реализующий интерфейс Shape. Класс должен иметь свойство радиуса (номер), доступное только для чтения, установленное через конструктор, и реализовывать getArea(): число (возвращающее Math.PI * radius * radius).
Показать подсказку
Use реализует Shape в классе Circle и определяет метод getArea(): Number.
Решение доступно после 3 попыток
Упражнение 3. Абстрактный класс транспортного средства и подкласс мотоцикла
Объявите класс Motorcycle, который расширяет абстрактный класс Vehicle. Он должен реализовать метод start() для возврата строки «Мотоцикл», за которой следуют make (this.make) и «started».
Показать подсказку
Используйте класс Motorcycle, расширяющий Vehicle, и реализуйте строковый метод start():, который возвращает правильную строку.
Решение доступно после 3 попыток
Упражнение 4. Свойства параметров и наследование
Создайте класс с именем «Сотрудник», который определяет идентификатор (число) свойства, доступного только для чтения, и имя общедоступного свойства (строка), используя сокращенную версию конструктора. Затем создайте класс Developer, который расширяет класс «Сотрудник» и добавляет через конструктор отдел общедоступной собственности (строку).
Показать подсказку
Используйте super(id, name) в конструкторе разработчика и используйте public Department для определения свойства через конструктор.
Решение доступно после 3 попыток