TypeScriptにはObject型とobject型があるが、それぞれ違う型である。Object型はプリミティブ型のboolean, number, string, symbolも含むのに対し、object型はプリミティブ型を含まない。{}型はObject型と同じだ。
「AがObjectのサブタイプである」というのは「AがObject.prototypeと同じ構造のプロパティとメソッドを持つ」ということなので、そう考えるとBooleanやNumberにも.toStringなどが生えており、それらがObject型に含まれるのは不思議なことではない。
