intermediate

Access modifiers

Используйте public, protected, private, readonly и ECMAScript private fields для выражения API intent, помня какие checks существуют только at compile time.

TypeScript даёт `public`, `protected`, `private`, `readonly` и ECMAScript `#private`. `private`/`protected` стираются при компиляции — в runtime JS всё ещё может достучаться. `#field` — настоящая runtime privacy.

Модификаторы документируют intent API и ловят misuse на build; TS private — не security boundary.

На интервью: разница `private` и `#secret`, когда `readonly` помогает immutability.

Типовые ошибки: private для секретов; protected на всё и coupling подклассов; обход checker через `as any`.

Компромисс — ergonomics compile-time против отсутствия runtime enforcement у классических модификаторов.

Чеклист:

  • `#field`, когда нужна runtime privacy.
  • Явный `public` API surface.
  • `readonly` для shallow immutability.