概要: このチュートリアルでは、TypeScript の object 型と、より正確な object 型宣言の記述方法について学習します。
TypeScript オブジェクト型の概要
TypeScript の object 型は、プリミティブ型ではないすべての値を表します。
TypeScript のプリミティブ型は以下のとおりです。
オブジェクトを保持する変数を宣言する方法を以下に示します。
let employee: object;
employee = {
firstName: 'John',
lastName: 'Doe',
age: 25,
jobTitle: 'Web Developer'
};
console.log(employee);Code language: TypeScript (typescript)出力
{
firstName: 'John',
lastName: 'Doe',
age: 25,
jobTitle: 'Web Developer'
}Code language: TypeScript (typescript)プリミティブ値を employee オブジェクトに再代入すると、エラーが発生します。
employee = "Jane";Code language: TypeScript (typescript)エラー
error TS2322: Type '"Jane"' is not assignable to type 'object'.Code language: JavaScript (javascript)employee オブジェクトは、固定されたプロパティリストを持つ object 型です。 employee オブジェクトに存在しないプロパティにアクセスしようとすると、エラーが発生します。
console.log(employee.hireDate);Code language: CSS (css)エラー
error TS2339: Property 'hireDate' does not exist on type 'object'.Code language: JavaScript (javascript)上記のステートメントは JavaScript では正常に動作し、代わりに undefined を返すことに注意してください。
employee オブジェクトのプロパティを明示的に指定するには、まず以下の構文を使用して employee オブジェクトを宣言します。
let employee: {
firstName: string;
lastName: string;
age: number;
jobTitle: string;
};Code language: TypeScript (typescript)次に、記述されたプロパティを持つリテラルオブジェクトに employee オブジェクトを代入します。
employee = {
firstName: 'John',
lastName: 'Doe',
age: 25,
jobTitle: 'Web Developer'
};Code language: TypeScript (typescript)または、同じステートメントで両方の構文を次のように組み合わせることができます。
let employee: {
firstName: string;
lastName: string;
age: number;
jobTitle: string;
} = {
firstName: 'John',
lastName: 'Doe',
age: 25,
jobTitle: 'Web Developer'
};Code language: TypeScript (typescript)object vs. Object
TypeScript には、大文字の O を持つ Object という別の型があります。これらの違いを理解することが重要です。
object 型はすべての非プリミティブ値を表しますが、Object 型はすべてのオブジェクトの機能を記述します。
たとえば、Object 型には、どのオブジェクトからもアクセスできる toString() メソッドと valueOf() メソッドがあります。
空の型 {}
TypeScript には、{} で表される空の型と呼ばれる別の型があり、これはオブジェクト型と非常によく似ています。
空の型 {} は、それ自体にプロパティを持たないオブジェクトを記述します。このようなオブジェクトのプロパティにアクセスしようとすると、TypeScript はコンパイル時エラーを発行します。
let vacant: {};
vacant.firstName = 'John';Code language: TypeScript (typescript)エラー
error TS2339: Property 'firstName' does not exist on type '{}'.Code language: JavaScript (javascript)ただし、プロトタイプチェーンを介してオブジェクトで使用可能な Object 型で宣言されているすべてのプロパティとメソッドにアクセスできます。
let vacant: {} = {};
console.log(vacant.toString());Code language: TypeScript (typescript)出力
[object Object]Code language: JSON / JSON with Comments (json)まとめ
- TypeScript の
object型は、プリミティブ値ではない任意の値を表します。 - ただし、
Object型は、すべてのオブジェクトで使用可能な機能を記述します。 - 空の型
{}は、それ自体にプロパティを持たないオブジェクトを指します。