{}, object, Objectの違い@TypeScript

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