2016-12-13 14 views

答えて

3

Objectには、JavaScriptのように同じものです。

違いは、anyが同様プリミティブを受け入れることである:Numberに箱入りのない限りnumberは、オブジェクトではありません。

したがって、Array<any>にプリミティブを含めることができますが、Array<Object>はできません。

TL; DR:使用しないでくださいObject

出典:TypeScript's Do's and Don'ts

3

あなたは基本的にanyObjectの違いに何を求めているとそれがdocs about anyに答えています:

任意のタイプは、既存のJavaScriptと連携するための強力な方法である、 はあなたが徐々にオプトインすることができますし、 コンパイル中にタイプチェックをオプトアウトします。 は他の言語でと同じようにObjectが同様の役割を果たすと考えられます。しかし、Object型の変数は、あなたが それらに任意の値を割り当てることができます - 実際には存在も含め、あなたが 上でそれらを任意のメソッドを呼び出すことはできません。

let notSure: any = 4; 
notSure.ifItExists(); // okay, ifItExists might exist at runtime 
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check) 

let prettySure: Object = 4; 
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'. 
2

Objectは、クラスのルート型であり、したがって、Object.prototypeで定義された固有のプロパティを除き、プロパティはありません。

anyはダイナミックタイプで、アクセスするプロパティに関係なくコンパイルされます。例えば

:活字体で

const a: Object = "Object" 
a.length // ERROR 

const b: any = "Any" 
b.length // Compiles 
+1

まあ、実際に...その固有の特性を持っていないオブジェクト、私はあなたが何を意味するのかを理解しますが、それはいくつかのために混乱するかもしれません。 – Shai

+1

良い点!クイック編集:) –

関連する問題