TypeScriptバージョン2.2では、新しいタイプのobject導入されました。 非プリミティブ型を記述します。
JavaScriptでは、次のタイプがプリミティブと見なされJavaScript 。
booleannumberstringsymbolnullundefined
他のすべてのタイプは非プリミティブと見なされます。
新しい型objectはそれらを正確に表します:
objectがどのように型をより正確に記述するのに役立つかを見てみましょう。
objectタイプを使用したタイプの説明
TypeScriptバージョン2.2リリースで、標準ライブラリタイプの説明は新しいobjectタイプを使用して更新されました。 たとえば、 Object.create()およびObject.setPrototypeOf()メソッドは、prototypeパラメーターをobject | null object | null :
interface ObjectConstructor { create(o: object | null): any; setPrototypeOf(o: any, proto: object | null): any;
プリミティブ型をプロトタイプとしてObject.setPrototypeOf()またはObject.create()に渡すと、コードの実行中にTypeError例外がスローされます。 TypeScriptは、コンパイル時にこれらのエラーをキャッチするようになりました。
const proto = {}; Object.create(proto);
objectタイプを使用する別の場所は、 WeakMapデータWeakMapです。 キーはオブジェクトでなければならず、プリミティブにはできません。 この要件はチップに反映されます。
interface WeakMap<K extends object, V> { delete(key: K): boolean; get(key: K): V | undefined; has(key: K): boolean; set(key: K, value: V): this; }
object vs Object vs {}
TypeScriptは、類似した名前を持っているが異なる概念を表すいくつかの型が定義されていると混同される場合があります。
上記の新しいタイプのobjectを調べました。 それでは、 Objectと{}説明しましょう。
タイプObject
Typescriptは、新しいobjectタイプとほぼ同じ名前の異なるタイプを定義しobject 。これはObjectタイプです。 object (小文字)はすべての非プリミティブ型を表しますが、 Object (大文字)はすべてのJavaScriptオブジェクトに共通の機能を表します。 たとえば、 toString()およびhasOwnProperty()メソッド。 ファイルlib.es6.d.ts Object型は次のように定義されています。
interface Object {
タイプ{}
非常に類似した別のタイプがあります: {} 、空のオブジェクトタイプ。 独自のプロパティを持たないオブジェクトを記述します。 そのようなオブジェクトの任意のプロパティにアクセスしようとすると、 TypeScriptはコンパイル時にエラーをスローします。
ただし、プロトタイプチェーンを介して暗黙的にアクセスできるObjectタイプで説明されているすべてのプロパティとメソッドを使用できます。