Выбор ответа Junior Классы и интерфейсы спрашивают часто обновлено
private в рантайме
Вопрос
Что выведет код (он компилируется благодаря as any)?
class User {
private token = 'abc';
}
const u = new User();
console.log((u as any).token);
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 'abc'. Модификатор private существует только в системе типов.
Варианты ответа
- Ошибка компиляции, несмотря на
as any 'abc'правильный ответundefined- TypeError: поле приватное
Разбор
Модификатор private существует только в системе типов. После компиляции token это обычное свойство объекта, и обход проверки через as any спокойно его читает: 'abc'.
undefined и TypeError были бы ожиданием настоящей приватности. Её даёт только поле #token: снаружи класса обращение к нему синтаксическая ошибка, а свойства token у объекта просто нет. as any как раз выключает проверку компилятора, поэтому ошибки компиляции нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.