Модификаторы доступа в TypeScript используются для управления видимостью свойств и методов классов. Они позволяют создавать более структурированный и безопасный код, защищая внутренние детали реализации.
1. Public (Публичный доступ)
Что это?
- Свойства и методы с модификатором `public` доступны везде: внутри класса, из подклассов и извне. - **По умолчанию** все свойства и методы класса в TypeScript являются `public`.Пример
```typescript class Person { public name: string;constructor(name: string) { this.name = name; }
public greet(): void {
console.log(Hello, my name is ${this.name}
);
}
}
const person = new Person("Alice"); console.log(person.name); // Доступно person.greet(); // Доступно
---
<h2 id="2-private-приватный-доступ">2. Private (Приватный доступ)</h2>
<h3 id="что-это">Что это?</h3>
- Свойства и методы с модификатором `private` доступны только внутри самого класса.
- Они недоступны извне или в подклассах.
<h3 id="пример">Пример</h3>
```typescript
class BankAccount {
private balance: number;
constructor(initialBalance: number) {
this.balance = initialBalance;
}
public deposit(amount: number): void {
this.balance += amount;
}
public getBalance(): number {
return this.balance;
}
}
const account = new BankAccount(1000);
account.deposit(500);
console.log(account.getBalance()); // 1500
// console.log(account.balance); // Ошибка: свойство "balance" недоступно
3. Protected (Защищённый доступ)
Что это?
- Свойства и методы с модификатором `protected` доступны внутри класса и его подклассов, но недоступны извне.Пример
```typescript class Vehicle { protected speed: number;constructor(speed: number) { this.speed = speed; }
protected displaySpeed(): void {
console.log(Speed: ${this.speed} km/h
);
}
}
class Car extends Vehicle { private brand: string;
constructor(brand: string, speed: number) { super(speed); this.brand = brand; }
public showDetails(): void {
console.log(Brand: ${this.brand}
);
this.displaySpeed();
}
}
const car = new Car("Toyota", 120); car.showDetails(); // car.displaySpeed(); // Ошибка: метод "displaySpeed" недоступен извне
---
<h2 id="4-сравнение-модификаторов-доступа">4. Сравнение модификаторов доступа</h2>
| Модификатор | Видимость в классе | Видимость в подклассах | Видимость извне |
|-------------|--------------------|------------------------|-----------------|
| `public` | ✅ | ✅ | ✅ |
| `private` | ✅ | ❌ | ❌ |
| `protected` | ✅ | ✅ | ❌ |
---
<h2 id="5-использование-модификаторов-в-конструкторах">5. Использование модификаторов в конструкторах</h2>
TypeScript позволяет задавать модификаторы прямо в параметрах конструктора, что упрощает код.
<h3 id="пример">Пример</h3>
```typescript
class User {
constructor(
public username: string,
private password: string,
protected email: string
) {}
public getEmail(): string {
return this.email;
}
}
const user = new User("john_doe", "securePass", "john@example.com");
console.log(user.username); // Доступно
// console.log(user.password); // Ошибка: свойство "password" недоступно
console.log(user.getEmail()); // Доступно
Итоговые вопросы для подготовки
- Чем отличаются
public
,private
иprotected
? - В каких случаях использовать
protected
, а неprivate
? - Как задать модификаторы доступа прямо в конструкторе?
- Почему использование
private
повышает безопасность кода? - Какие ошибки могут возникнуть при неправильном применении модификаторов?
Совет: Экспериментируйте с разными модификаторами доступа, чтобы лучше понять их особенности и научиться эффективно применять их в реальных проектах.