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.