Основы TypeScript: ООП практика, классы и наследование

Источник: «TypeScript Basics (9/10): OOP Practices, Classes and Inheritance»
Добро пожаловать в девятую часть нашей серии статей о TypeScript! В этой части мы углубимся в практику объектно-ориентированного программирования (ООП), уделив особое внимание классам и наследованию.

Эти концепции позволяют моделировать реальные объекты структурированным и удобным для сопровождения способом. Присоединяйтесь к нам, поскольку мы исследуем глубину ООП в TypeScript, предоставляя понимание создания модульного и многократно используемого кода.

Классы

Класс — это схема для создания объектов со свойствами и методами. Он позволяет моделировать реальные объекты в коде.

Пример базового класса:

class Animal {
// Свойства
name: string;
age: number;

// Конструктор
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}

// Метод
makeSound(): void {
console.log("Some generic sound");
}
}

// Создание экземпляра класса Animal
const myAnimal = new Animal("Leo", 5);

console.log(myAnimal.name); // Вывод: Leo

myAnimal.makeSound(); // Вывод: Some generic sound

В данном примере Animal — это класс со свойствами (name и age), конструктором для инициализации этих свойств и методом (makeSound).

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

Наследование позволяет классу наследовать свойства и методы от другого класса, что способствует повторному использованию кода и созданию иерархических отношений.

class Dog extends Animal {
// Дополнительные свойства
breed: string;

// Constructor
constructor(name: string, age: number, breed: string) {
// Вызов конструктора базового класса (Animal)
super(name, age);

// Инициализация свойства производного класса
this.breed = breed;
}

// Переопределение метода makeSound
makeSound(): void {
console.log("Woof! Woof!");
}

// Дополнительный метод, специфичный для Dog
fetch(): void {
console.log("Fetching the ball!");
}
}

// Создание экземпляра класса Dog
const myDog = new Dog("Buddy", 3, "Labrador");

console.log(myDog.name); // Вывод: Buddy
console.log(myDog.breed); // Вывод: Labrador

myDog.makeSound(); // Вывод: Woof! Woof!
myDog.fetch(); // Вывод: Fetching the ball!

В этом примере Dog является подклассом Animal. Он наследует свойства и методы от Animal, а также может иметь свои собственные свойства и методы. Ключевое слово super используется для вызова конструктора базового класса.

Модификаторы доступа

Модификаторы доступа управляют видимостью членов класса (свойств и методов). TypeScript поддерживает модификаторы доступа public, private и protected.

class Person {
private age: number;

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

getDetails(): string {
return `${this.name}, ${this.age} years old.`;
}
}

const john = new Person("John", 30);

console.log(john.getDetails()); // Вывод: John, 30 years old.

// console.log(john.age); // Ошибка: Property 'age' is private and only accessible within class 'Person'.

В этом примере age помечен как private, что делает его доступным только в классе Person.

Абстрактные классы

Абстрактный класс — это класс, который не может быть инстанцирован и часто используется в качестве базового класса для других классов.

abstract class Shape {
abstract calculateArea(): number;
}

class Circle extends Shape {
constructor(private radius: number) {
super();
}
calculateArea(): number {
return Math.PI * this.radius ** 2;
}
}

const myCircle = new Circle(5);
console.log(myCircle.calculateArea()); // Вывод: 78.53981633974483

Здесь Shape — это абстрактный класс с абстрактным методом calculateArea(). Класс Circle расширяет Shape и предоставляет реализацию метода calculateArea().

Практика ООП с классами и наследованием в TypeScript позволяет создавать модульный, многократно используемый и хорошо организованный код. Они помогают моделировать сложные системы таким образом, чтобы они отражали реальные сущности и отношения.

Основы TypeScript

  1. Основы TypeScript: компилятор TypeScript (tsc) и tsconfig.json
  2. Основы TypeScript: JavaScript в сравнении с TypeScript
  3. Основы TypeScript: Примитивы и базовые типы
  4. Основы TypeScript: Неявные и Явные типы, Утверждения типов
  5. Основы TypeScript: Создание типов, перечислений и интерфейсов
  6. Основы TypeScript: Объединение, Литеральные и Размеченные типы
  7. Основы TypeScript: Типизация функций и сигнатур
  8. Основы TypeScript: Any, Void, Never, Null, Строгие проверки Null
  9. Основы TypeScript: ООП практика, классы и наследование

Дополнительные материалы

Предыдущая Статья

PHP 8.4: Sodium: Поддержка AEGIS-128L и AEGIS256

Следующая Статья

JSDoc: Надёжная альтернатива TypeScript