Выбор ответа Senior Классы и интерфейсы обновлено

Классы с private и совместимость

Вопрос

Что скажет компилятор?

class A { private x = 1 }
class B { private x = 1 }

const a: A = new B();

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

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

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

Коротко

Правильный ответ: Ошибка: у типов есть разные объявления приватного свойства x. Обычно классы совместимы по форме.

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

  1. Всё компилируется, но только при strict: false
  2. Всё компилируется: формы классов совпадают
  3. Ошибка: у типов есть разные объявления приватного свойства xправильный ответ
  4. Ошибка: private поле нельзя инициализировать при объявлении

Разбор

Обычно классы совместимы по форме. Но если в классе есть private или protected член, совместимыми считаются только типы, у которых этот член происходит из одного и того же объявления: сам класс и его наследники. У A и B поля x объявлены отдельно, поэтому присваивание запрещено.

Без private оба класса были бы совместимы. Инициализация при объявлении разрешена. strict на это правило не влияет.

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

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