Как использовать классы TypeScript с простыми примерами

TypeScript привносит мощные возможности в JavaScript, включая концепцию классов, которая позволяет использовать объектно-ориентированное программирование. Классы предоставляют план создания объектов, инкапсуляции данных и определения поведения. Это руководство проведет вас через основы классов TypeScript с простыми примерами.

Что такое класс?

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

Определение базового класса

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

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

Ниже приведен пример простого класса Person со свойствами и методом:

class Person {
  name: string;
  age: number;

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

  greet(): void {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person("Alice", 30);
person1.greet(); // Output: Hello, my name is Alice and I am 30 years old.

В этом примере класс Person имеет два свойства: name и age. Метод конструктора инициализирует эти свойства, а метод greet выводит приветственное сообщение.

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

TypeScript предоставляет три модификатора доступа для управления видимостью членов класса:

  • public: Участники доступны из любой точки мира (по умолчанию).
  • private: Члены доступны только внутри класса.
  • protected: Члены доступны внутри класса и его подклассов.

Использование модификаторов доступа

Вот как можно использовать модификаторы доступа в классе TypeScript:

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;
  }
}

const dog = new Animal("Buddy", 5);
console.log(dog.name); // Output: Buddy
console.log(dog.getAge()); // Output: 5
// console.log(dog.age); // Error: 'age' is private and only accessible within class 'Animal'.

В этом примере name — это открытое свойство, доступное извне класса, тогда как age — это закрытое свойство, доступное только внутри класса.

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

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

Пример наследования

Ниже приведен пример класса Dog, который наследует от базового класса Animal:

class Animal {
  constructor(public name: string) {}

  makeSound(): void {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name); // Call the constructor of the base class
  }

  makeSound(): void {
    console.log(`${this.name} barks.`);
  }
}

const dog = new Dog("Buddy");
dog.makeSound(); // Output: Buddy barks.

В этом примере класс Dog расширяет класс Animal и переопределяет метод makeSound.

Геттеры и сеттеры

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

Пример геттеров и сеттеров

class Person {
  private _name: string;

  constructor(name: string) {
    this._name = name;
  }

  get name(): string {
    return this._name;
  }

  set name(newName: string) {
    if (newName) {
      this._name = newName;
    } else {
      console.log("Name cannot be empty.");
    }
  }
}

const person = new Person("Alice");
console.log(person.name); // Output: Alice
person.name = "Bob";
console.log(person.name); // Output: Bob

В этом примере доступ к свойству name и его изменение осуществляются с помощью методов getter и setter.

Заключение

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