Skip to main content

Що робить модифікатор доступу private?

Модифікатор private у TypeScript використовується, щоб приховати властивість або метод класу - зробити його доступним лише всередині самого класу.

Це засіб інкапсуляції, який допомагає захистити внутрішні дані від зовнішнього втручання.


1. Синтаксис

javascript
class User { private password: string; constructor(password: string) { this.password = password; } private encryptPassword(): string { return this.password.split("").reverse().join(""); } public checkPassword(pwd: string): boolean { return this.encryptPassword() === pwd.split("").reverse().join(""); } } const u = new User("secret"); u.checkPassword("secret"); // можна u.password; // Помилка - private u.encryptPassword(); // Помилка - private

Усе, що позначено як private, доступне лише всередині самого класу (ні ззовні, ні в нащадках використати не можна).


2. Правила видимості

Де звертаємосяЧи можна отримати доступ до private?
Усередині класуТак
У нащадкуНі
Ззовні (через екземпляр)Ні

3. Приклад з успадкуванням

javascript
class Animal { private type = "animal"; public showType() { console.log(this.type); } } class Dog extends Animal { bark() { // console.log(this.type); Помилка - private в Animal } } const dog = new Dog(); dog.showType(); // працює через публічний метод

private захищає дані навіть від нащадків. Якщо потрібно, щоб було видно в успадкованих класах - потрібен protected.


4. Private-поля в параметрах конструктора

javascript
class User { constructor(private name: string, private age: number) {} public getInfo() { return `${this.name}, ${this.age}`; } } const u = new User("Tim", 30); u.getInfo(); // Tim, 30 u.name; // Помилка: private

TypeScript сам створює і типізує приватні поля, якщо вказати private прямо в параметрі конструктора.


5. Різниця між private (TS) і #private (JS)

TypeScript підтримує два види приватності:

ВидРівень приватностіПеревіряєтьсяДоступність у рантаймі
privateЛише на рівні TypeScriptпід час компіляціїНі (видаляється в JS)
#privateСправжнє поле JavaScript (ES2022)рушієм JSТак (реально приватне)

Приклад:

javascript
class Account { private balance = 100; // приватність лише на рівні TS #id = 42; // приватність на рівні JS getInfo() { console.log(this.balance, this.#id); } } const a = new Account(); a.balance; // Помилка типів (але доступно в рантаймі через a["balance"]) a.#id; // Помилка і на рівні типів, і на рівні JS - реально приховано

#private працює навіть після компіляції - це справжній захист у рантаймі, а не лише в TS.


6. Поєднання private + readonly

Іноді поля роблять приватними і лише для читання:

javascript
class Config { private readonly secret = "key123"; }

Не можна змінити значення навіть усередині класу після ініціалізації.


Підсумок

ХарактеристикаОпис
ДоступністьЛише всередині класу
Доступ з нащадківНі
Доступ ззовніНі
Рівень захистуПеревіряється TypeScript під час компіляції
Альтернатива#private - справжнє приватне поле в JS
Часте застосуванняДля приховування логіки, паролів, токенів, внутрішніх даних

Коротко:

private захищає внутрішні дані класу від зовнішнього коду і робить їх доступними лише всередині самого класу.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.