オブジェクトとは何か?
この記事で紹介したプリミティブ型という基本的な7つの型以外のものを、
オブジェクトという。
他の言語だと、オブジェクト = クラスなどに結び付けられがちだが、
TypeScriptの場合、クラスだけにとどまらない、広い範囲を含むのが特徴だ。
代表的なものとしては、
const val = {
obj1: 123,
obj2: 'hello'
}
console.log(val.obj1) // 123と表示される
定義方法としては、
{}の中に、プロパティ名(キー):値と定義する。
オブジェクトの中身(プロパティ)を得ている、
console.log(val.obj1)の部分は、
プロパティアクセスに当たる。
ちなみにプロパティアクセスの方法としては、
console.log(val["obj1"]) // 123と表示される
のような記法もある。
いくつかのデータをまとめて管理したいときなどは、
オブジェクトが利用されることが多い。
なお、省略記法もあり、
例えば次のようにかける。
//省略しない書き方
const hello = 'Hello World'
const user1 = {
hello: hello,
age: 28,
}
console.log(user1.hello)
//省略記法
const hello = 'Hello World'
const user1 = {
hello,
age: 28,
}
console.log(user1.hello)
変数名とプロパティ名が同じ場合、
: 変数名の部分を省略できる。
オブジェクトの型
オブジェクトの型は、
例えば次のように記述する
const val: {
obj1: number,
obj2: string
} = {
obj1: 123,
obj2: 'hello'
}
console.log(val.obj1) // 123と表示される
この場合、変数valの型は、
{ obj1: number, obj2: string }型となる。
複数の値に対してそれぞれ型を定義しているだけで、
一つ一つについては、プリミティブのときと同様。
ただ、記述が長くなるので、
type文を使うことが実際には多い。
type valobj = {
obj1: number,
obj2: string
}
const val: valobj = {
obj1: 123,
obj2: 'hello'
}
console.log(val.obj1)
type文は、上記のように、
型を宣言する構文である。
すでに存在する型に対して、
別名をつけることができる。
型引数
上記のtype文と関連して、
型引数という、type文の中でだけ有効な型として
扱えるものがある。
type valobj<T> = {
obj1: number,
obj2: T
}
上記の型引数を持つ型は、
ジェネリック型という。
上記の型を実際に使う場合は、
引数に型を指定する。
const val: valobj<string> = {
obj1: 123,
obj2: 'hello'
}
この場合、
stringが引数に渡されているので、
valobj型のTはstringとなり、
{ obj1: number, obj2: string }型と同様になる。
なお型引数を指定した場合、
呼び出し側で引数を指定しないと、
コンパイルエラーになる。
//型引数なしでは呼び出せない。
const val: valobj = {
obj1: 123,
obj2: 'hello'
}
そのため、省略可能なオプショナルな型引数にする場合は、
予めデフォルト値を定義しておけばいい。
type valobj<T = string> = {
obj1: number,
obj2: T
}
const val: valobj = {
obj1: 123,
obj2: 'hello'
}
この場合、型引数が指定されないと、
Tはstring型になる。
配列
配列は、[]で定義される、
複数のデータをまとめたデータ構造で、
オブジェクトの一種である。
const arr = ['hello', 'alice', 123]
console.log(arr)
配列の値にアクセスするには、
arr[0]
と番号を指定する。
0始まりからなので、先頭の要素は、
arr[0]というふうに取得する。
配列は、上記の番号、
0とか1といったプロパティ名を持つ、
オブジェクトともいえるので、
オブジェクトのプロパティアクセスの方法で
値を取得することができる。
配列の型
配列の型は、
const arr: string[] = ['hello', 'alice']
というふうに、型[]と記述する
もう一つの記法として、
const arr: Array<string> = ['hello', 'alice']
というのも存在する。こちらは組み込みのジェネリック型にあたる。
また、最初に定義したような、
複数の型が混ざった配列の場合は、
ユニオン型を使って、
const arr: (string | number)[] = ['hello', 'alice', 123]
というふうに記述する。