Как использовать классы 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, вы можете писать более надежный и поддерживаемый код для своих приложений.