フィールドをArray<any>
とArray<Object>
として宣言するのと異なる点はどれですか。Typescript2:Array <any>と配列<Object>の差異
typescriptに余分なコレクションツールがありますか?
フィールドをArray<any>
とArray<Object>
として宣言するのと異なる点はどれですか。Typescript2:Array <any>と配列<Object>の差異
typescriptに余分なコレクションツールがありますか?
Object
には、JavaScriptのように同じものです。
違いは、any
が同様プリミティブを受け入れることである:Number
に箱入りのない限りnumber
は、オブジェクトではありません。
したがって、Array<any>
にプリミティブを含めることができますが、Array<Object>
はできません。
TL; DR:使用しないでくださいObject
。
あなたは基本的にany
とObject
の違いに何を求めているとそれが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'.
Object
は、クラスのルート型であり、したがって、Object.prototype
で定義された固有のプロパティを除き、プロパティはありません。
any
はダイナミックタイプで、アクセスするプロパティに関係なくコンパイルされます。例えば
:活字体で
const a: Object = "Object"
a.length // ERROR
const b: any = "Any"
b.length // Compiles
まあ、実際に...その固有の特性を持っていないオブジェクト、私はあなたが何を意味するのかを理解しますが、それはいくつかのために混乱するかもしれません。 – Shai
良い点!クイック編集:) –