Выбор ответа Senior Классы и интерфейсы обновлено
Классы с private и совместимость
Вопрос
Что скажет компилятор?
class A { private x = 1 }
class B { private x = 1 }
const a: A = new B();
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка: у типов есть разные объявления приватного свойства x. Обычно классы совместимы по форме.
Варианты ответа
- Всё компилируется, но только при
strict: false - Всё компилируется: формы классов совпадают
- Ошибка: у типов есть разные объявления приватного свойства
xправильный ответ - Ошибка:
privateполе нельзя инициализировать при объявлении
Разбор
Обычно классы совместимы по форме. Но если в классе есть private или protected член, совместимыми считаются только типы, у которых этот член происходит из одного и того же объявления: сам класс и его наследники. У A и B поля x объявлены отдельно, поэтому присваивание запрещено.
Без private оба класса были бы совместимы. Инициализация при объявлении разрешена. strict на это правило не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.