TypeScriptはその名の通り、基本的に型を厳密に定義しないといけませんが、タイトルの通り似たような三つのオブジェクト定義が存在します。その性質の違いを見るのが以下のコードです。
// object, Object and {}
let o1: {}
let o2: object
let o3: Object // Object is an interface
o1 = {a: 2} // object
o1 = 123 // primitive
o2 = {a: 2}
//o2 = 123 // primitive is not usable
o3 = {a: 2}
o3 = 123
o1 = {toString() {return 1}} // accept any type of object
//o3 = {toString() {return 1}} // treat o3 as a string type which is a predefined type
・{}, Object : オブジェクトもプリミティブも代入可能
・object : オブジェクトのみ代入可能
実はObjectはインターフェースであると、またTypeScriptではプリミティブ以外は全てオブジェクトです。
オブジェクトの定義方法としては、
オブジェクトとプリミティブの分離のためと思いますが、
let o0: {a: 1}のようなオブジェクトそのものを定義、もしくはobjectを使うのが推奨されています。
admin