Основы 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
- Основы TypeScript: компилятор TypeScript (
tsc
) иtsconfig.json
- Основы TypeScript: JavaScript в сравнении с TypeScript
- Основы TypeScript: Примитивы и базовые типы
- Основы TypeScript: Неявные и Явные типы, Утверждения типов
- Основы TypeScript: Создание типов, перечислений и интерфейсов
- Основы TypeScript: Объединение, Литеральные и Размеченные типы
- Основы TypeScript: Типизация функций и сигнатур
- Основы TypeScript:
Any
,Void
,Never
,Null
, Строгие проверки Null - Основы TypeScript: ООП практика, классы и наследование
- Основы TypeScript: Сетеры/Гетеры,
protected
,private
/public
/static