TypeScript Academy · Урок

Модификаторы public, private и protected

Управляйте доступом к членам класса с помощью модификаторов

Урок 2 из 413 шагов

«Модификаторы public, private и protected» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

Модификаторы доступа TypeScript управляют видимостью элементов класса. Они помогают обеспечить инкапсуляцию и предотвратить непреднамеренное использование.

public: доступен повсюду

public используется по умолчанию. Общедоступные элементы доступны отовсюду — внутри класса, в производных классах и во внешнем коде.
class Car {
  public brand: string;
  constructor(brand: string) { this.brand = brand; }
}
const c = new Car('Toyota');
console.log(c.brand); // OK

private: доступ только внутри класса

Закрытые элементы доступны только внутри класса, в котором они объявлены. Производные классы и внешний код не могут обращаться к ним.
class BankAccount {
  private balance: number = 0;
  deposit(n: number) { this.balance += n; }
}
const a = new BankAccount();
// a.balance; // Error!

protected: доступ из класса и производных классов

Защищённые элементы доступны внутри объявляющего их класса и любого производного класса, но не во внешнем коде.
class Animal {
  protected name: string;
  constructor(name: string) { this.name = name; }
}
class Dog extends Animal {
  bark() { console.log(this.name + ' says woof!'); } // OK
}

Проверка только на этапе компиляции

Модификаторы доступа TypeScript проверяются только на этапе компиляции. В результирующем JavaScript всё ещё есть общедоступные свойства — проверка во время выполнения отсутствует.

Закрытые поля JavaScript с #

В JavaScript есть встроенные закрытые поля с `#`, доступ к которым проверяется во время выполнения. TypeScript поддерживает этот синтаксис наряду с собственным ключевым словом `private`.
class Counter {
  #count = 0; // runtime private (JavaScript)
  increment() { this.#count++; }
  get value() { return this.#count; }
}

Модификатор readonly

Свойства readonly можно задавать только во время создания объекта. После инициализации их нельзя изменять.
class User {
  readonly id: number;
  constructor(id: number) { this.id = id; }
}
const u = new User(1);
// u.id = 2; // Error!

Объединение модификаторов

Модификаторы доступа можно объединять с readonly в одном свойстве.
class Config {
  constructor(
    public readonly host: string,
    private readonly port: number
  ) {}
}

private у конструктора

Закрытый конструктор предотвращает создание экземпляров из внешнего кода. Вместо него используйте статические фабричные методы.
class Singleton {
  private static instance: Singleton;
  private constructor() {}
  static getInstance(): Singleton {
    return this.instance ??= new Singleton();
  }
}

Защищённый конструктор

Защищённый конструктор предотвращает непосредственное создание экземпляров, но позволяет производным классам вызывать его через super().
class Base {
  protected constructor(public id: number) {}
}
class Derived extends Base {
  constructor(id: number) { super(id); }
}

Модификаторы доступа не создают накладных расходов во время выполнения

Поскольку TypeScript удаляет всю информацию о типах, модификаторы доступа никак не влияют на размер или производительность скомпилированного кода JavaScript.

Быстрая проверка

Какой модификатор доступа делает элемент класса доступным внутри класса И его производных классов, но НЕ во внешнем коде?

Итоги

Используйте public (по умолчанию) для доступных элементов, private — для инкапсулированных внутренних элементов, а protected — для элементов, предназначенных производным классам. Добавляйте readonly, чтобы запретить изменение после создания объекта.
Можно начать бесплатно

Изучай TypeScript с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
101
Уроки
352

Часто задаваемые вопросы

Урок «Модификаторы public, private и protected» бесплатный?

Да — полный текст урока «Модификаторы public, private и protected» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Модификаторы public, private и protected»?

Управляйте доступом к членам класса с помощью модификаторов Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

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

Сколько времени занимает урок «Модификаторы public, private и protected»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Классы TypeScript и конструкторы
  2. Модификаторы public, private и protected
  3. Свойства readonly и свойства параметров
  4. Реализация интерфейсов с помощью классов
← Назад к TypeScript Academy