Какие модификаторы доступа поддерживает TypeScript?
TypeScript, являясь надстройкой над JavaScript, предоставляет несколько модификаторов доступа, которые помогают контролировать доступ к свойствам и методам классов. Эти модификаторы обеспечивают инкапсуляцию и позволяют организовать код более структурированным и безопасным образом. Рассмотрим поддерживаемые модификаторы доступа:
1. public
- Описание: Это модификатор по умолчанию. Свойства и методы, объявленные с модификатором
public
, доступны из любого места, как внутри класса, так и вне его. - Пример:
class User {
public name: string;
constructor(name: string) {
this.name = name;
}
public greet() {
console.log(`Привет, меня зовут ${this.name}`);
}
}
const user = new User('Алекс');
user.greet(); // Привет, меня зовут Алекс
2. private
- Описание: Свойства и методы, объявленные с модификатором
private
, доступны только внутри самого класса, в котором они были объявлены. Они не могут быть доступны из подклассов или из экземпляров класса. - Пример:
class Account {
private balance: number;
constructor(initialBalance: number) {
this.balance = initialBalance;
}
public deposit(amount: number) {
this.balance += amount;
console.log(`Баланс после депозита: ${this.balance}`);
}
public getBalance() {
return this.balance;
}
}
const account = new Account(100);
account.deposit(50); // Баланс после депозита: 150
// console.log(account.balance); // Ошибка: свойство 'balance' недоступно
3. protected
- Описание: Свойства и методы, объявленные с модификатором
protected
, могут быть доступны только внутри самого класса и в классах-наследниках. Это позволяет защищать данные, но при этом делать их доступными для наследующих классов. - Пример:
class Animal {
protected name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends Animal {
public bark() {
console.log(`${this.name} говорит: Гав!`);
}
}
const dog = new Dog('Рекс');
dog.bark(); // Рекс говорит: Гав!
// console.log(dog.name); // Ошибка: свойство 'name' недоступно
Резюме
Модификаторы доступа в TypeScript позволяют разработчикам управлять видимостью свойств и методов в классах. Используйте их для обеспечения инкапсуляции и улучшения структуры вашего кода. Если вы хотите, чтобы свойство или метод были доступны отовсюду — используйте public
. Если хотите защитить их от внешнего доступа — используйте private
. А если вам нужно разрешить доступ только в наследниках — protected
будет самым подходящим выбором.