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