Выбор ответа Junior Классы и интерфейсы спрашивают часто обновлено

private в рантайме

Вопрос

Что выведет код (он компилируется благодаря as any)?

class User {
  private token = 'abc';
}
const u = new User();
console.log((u as any).token);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 'abc'. Модификатор private существует только в системе типов.

Варианты ответа

  1. Ошибка компиляции, несмотря на as any
  2. 'abc'правильный ответ
  3. undefined
  4. TypeError: поле приватное

Разбор

Модификатор private существует только в системе типов. После компиляции token это обычное свойство объекта, и обход проверки через as any спокойно его читает: 'abc'.

undefined и TypeError были бы ожиданием настоящей приватности. Её даёт только поле #token: снаружи класса обращение к нему синтаксическая ошибка, а свойства token у объекта просто нет. as any как раз выключает проверку компилятора, поэтому ошибки компиляции нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.