совместимости типа в машинописном основано на структурном подтипировании, а не на типичном типе. Тем не менее, рассмотрим два следующих определения интерфейса:
interface IFoo { X: number }
interface IBar { X: number; Y: number }
ли IBar
расширяющие IFoo
? No.
Но является IFoo
совместимым с IBar
? Да.
Члены IFoo
являются подмножеством IBar
членов, таким образом, вы можете назначить любой IBar
к IFoo
. Но это не работает наоборот:
var x: IFoo;
var y: IBar;
x = y // all good
y = x // type error, x has no Y member
Таким образом, в машинописном все типы совместимы с Object
, если вы думаете о нем, как пустой интерфейс. Таким образом, вы можете передать любое действительное значение машинописного текста для функций, принимающих Object
, и хорошо сыграть с тем, как написаны Javascript libs.
Предлагаю прочитать Type Compatibility в документах и последнем абзаце о Подтип против задания.
Хорошо, это по существу объяснение, которое я ожидал (заметив, что я также могу назначить bool пустующему интерфейсу, который я определил как Bool, который изоморфен Object). Я понимаю структурный и номинальный, но не ожидал, что он применим к типам без ссылки. Я думаю, это звучит только в той степени, в которой Object действительно имеет пустой интерфейс (учитывая, что, вероятно, есть вещи, которые я могу сделать для объекта, который я не могу сделать с номером или примитивной строкой). – Roly
Я доволен объяснением, поэтому я принял ответ. Оказывается, меня укусили не потому, что число
Я предполагаю, что здесь есть смысл, в котором число <Объект необоснованно: он разбивает восходящее закрытие экземпляра. Другими словами, X
Roly