Основы TypeScript: Сетеры/Гетеры, protected, private/public/static

Источник: «TypeScript Basics (10/10): Set/Get, Protected, Private/Public/Static Members»
Добро пожаловать в десятую и заключительную часть нашей серии статей о TypeScript! В этой части мы исследуем тонкости работы с сеттерами/геттерами, protected, private/public и static.

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

Публичные, приватные и защищённые члены

Публичные: Члены, помеченные как public, доступны извне класса.

class Car {
public model: string;

constructor(model: string) {
this.model = model;
}
}

const myCar = new Car("Toyota");
console.log(myCar.model); // Доступен

Приватные: Члены, помеченные как private, доступны только внутри класса.

class Car {
private model: string;

constructor(model: string) {
this.model = model;
}

getModel(): string {
return this.model; // Доступен в пределах класса
}
}

const myCar = new Car("Toyota");

// console.log(myCar.model); // Error: Property 'model' is private and only accessible within class 'Car'.

console.log(myCar.getModel()); // Доступен через метод

Защищённые: Члены, помеченные как protected, доступны в пределах класса и его подклассов (дочерних классов).

class Vehicle {
protected wheels: number;

constructor(wheels: number) {
this.wheels = wheels;
}
}

class Car extends Vehicle {
constructor(wheels: number) {
super(wheels);
}

getWheels(): number {
return this.wheels; // Доступен в дочерних классах
}
}

const myCar = new Car(4);

// console.log(myCar.wheels); // Error: Property 'wheels' is protected and only accessible within class 'Vehicle' and its subclasses.

console.log(myCar.getWheels()); // Доступен через метод

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

Геттер: Используется для получения значения приватного свойства.

class Circle {
private _radius: number;

constructor(radius: number) {
this._radius = radius;
}

get radius(): number {
return this._radius;
}
}

const myCircle = new Circle(5);

console.log(myCircle.radius); // Доступен через геттер

Сеттер: Используется для обновления значения приватного свойства.

class Circle {
private _radius: number;

constructor(radius: number) {
this._radius = radius;
}

get radius(): number {
return this._radius;
}

set radius(newRadius: number) {
if (newRadius > 0) {
this._radius = newRadius;
}
}
}

const myCircle = new Circle(5);

console.log(myCircle.radius); // 5

myCircle.radius = 7; // Устанавливается через сеттер

console.log(myCircle.radius); // 7

myCircle.radius = -3; // Игнорируется сеттером

console.log(myCircle.radius); // 7

Статические члены

Статические члены принадлежат самому классу, а не его экземплярам.

class MathOperations {
static PI: number = 3.14159;

static calculateCircumference(radius: number): number {
return 2 * this.PI * radius;
}
}

console.log(MathOperations.PI); // Доступ к статическому свойству

console.log(MathOperations.calculateCircumference(5)); // Вызов статического метода

К статическим членам можно обращаться непосредственно в классе, не создавая его экземпляр.

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

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

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

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

Независимо от того, являетесь ли вы опытным разработчиком или только начинаете свой путь в программировании, мы надеемся, что эта серия статей углубила ваше понимание 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: ООП практика, классы и наследование
  10. Основы TypeScript: Сетеры/Гетеры, protected, private/public/static

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

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

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

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

SSH3: более быстрый и безопасный шелл с использованием HTTP/3