Обоснование, которое я понимаю, таково:
Сильное ограничение при назначении литерального объекта
При непосредственном определении x: X
дополнительное свойство somethingElse
должно никогда быть доступным, что, как представляется, является намерением при наборе этого как X
.
Все время в остальной части кода x
всегда будет иметь тип X
, и это не раскрывает somethingElse
, поэтому для компилятора здесь код (или разработчик;)) является несовместимым.
Меньше ограничений при назначении из другой переменной
При назначении другой переменной xx
with y
, y
не был явно введен, и, таким образом, свойство somethingElse
все еще может использоваться в других местах.
Для компилятора вы, кажется, временно restrict y
к той части, которая соответствует интерфейсу X
, и это хорошо. В более сложном примере, возможно, многие различные объекты могли бы соответствовать этой роли, поэтому заданный c интерфейс ввода с клавиатуры для xx
вполне допустим.