Модульні уроки (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: клас автомобіля та приватний модифікатор
Оголошіть клас під назвою Car. Він повинен мати властивість моделі лише для читання (рядок), визначену в конструкторі, приватну властивість mileage (number), ініціалізовану рівним 0, відкритий метод drive(miles: number): void, який збільшує пробіг на милі, і getMileage(): число, що повертає пробіг.
Показати підказку
Використовувати приватний пробіг: число = 0; щоб зробити змінну приватною, і constructor(public readonly model: string) {} як скорочення.
Рішення доступне після 3 спроб
Вправа 2: інтерфейс форми та клас кола
Завершіть код, реалізувавши клас Circle, який реалізує інтерфейс Shape. Клас повинен мати властивість radius (число) лише для читання, встановлену через конструктор, і реалізувати getArea(): number (повертає Math.PI * radius * radius).
Показати підказку
Використання реалізує Shape у класі Circle і визначте метод getArea(): number.
Рішення доступне після 3 спроб
Вправа 3: Абстрактний клас транспортного засобу та підклас мотоцикла
Оголошіть клас з назвою Motorcycle, який розширює абстрактний клас Vehicle. Він повинен реалізовувати метод start(), щоб повернути рядок "Motorcycle", за яким ідуть make (this.make) і " started".
Показати підказку
Використовуйте клас Motorcycle extends Vehicle і реалізуйте метод start(): string, який повертає правильний рядок.
Рішення доступне після 3 спроб
Вправа 4: Властивості параметрів і успадкування
Створіть клас під назвою Employee, який визначає ідентифікатор властивості лише для читання (число) та назву загальнодоступної властивості (рядок), використовуючи скорочення конструктора. Потім створіть клас Developer, який розширює Employee і додає відділ публічної власності (рядок) через конструктор.
Показати підказку
Використовуйте super(id, name) у конструкторі розробника та використовуйте публічний відділ, щоб визначити властивість через конструктор.
Рішення доступне після 3 спроб