Typescript(Array型)

はじめに

今回はオブジェクトの一つである配列についてです。javascript同様、TypescriptのArray型も要素の連結、追加、検索のような操作をサポートしています。

Array型の定義

①型指定
let chara: string[] = ["naruto", "sasuke", "sakura"];
console.log(chara);//(3) ["naruto", "sasuke", "sakura"]

型指定(: string[] )によるArray型の定義です。型指定によって文字列のみで配列を構成するように制限します。文字列以外の型を含むことを禁じます。また配列に追加する際も、型指定によって時にエラーを出力してくれます。

let chara: string[] = ["naruto", "sasuke", "sakura"];
chara.push("kakashi"); //文字列の追加なのでOK!

let chara: string[] = ["naruto", "sasuke", "sakura"];
chara.push(1);//エラー(型 '1' の引数を型 'string' のパラメーターに割り当てることはできません。)
型推論
let array = [1, 'a']

number型、string型を含む簡単な配列です。arrayにマウスホバーしてみると、let array: (string | number)[]とstringとnumberの間に|がが入っています。いわゆるユニオン型(合併型)です。ここではstringまたはnumberで構成された配列とTypescriptが推論してくれています。
string,number型以外を追加しようとするとエラーを投げかけてくれます。

let array = [1, "a"];
array.push(true);//エラー(型 'true' の引数を型 'string | number' のパラメーターに割り当てることはできません。)

Tuple型

javascriptには存在しない型の一つで、Tuple型は長さが固定された配列です。他の多くの型と違って、タプルを宣言するときは明示的に型指定する必要があります。
以下コードで確認しましょう。

let chara: [string, string, number] = ["uzumaki", "naruto", 7];
chara = ["uchiha", "sasuke", 7];

型指定(: [string, string, number])によってTuple型であることを定義しています。型の順番、長さが一致していれば、再代入も可能です。

またタプルは省略可能な要素もサポートしています。

let chara: [string, string, number?] = ["uzumaki", "naruto"]; //nimber型はなくてもOK !

型指定(: [string, string, number?])に?がついている型は省略可能です。ただし、必須要素を省略可能な要素の後に指定することはできません

let chara: [string, string?, number] = ["uzumaki", 7]; //エラー!

またTupleは可変長の要素もサポートしています。

const sports: [string, ...string[]] = [
  "baseballl",
  "soccer",
  "tennis",
  "basketball",
];

上のコードは、少なくとも1つの要素(とそれに続く可変長の要素)をもつ、文字列のリストを表しています。ここまでくるとTupleとは長さが固定された配列という言葉の定義に疑問が残りますが、、、

終わりに

以上がArray型になります。後半に取り扱ったTuple型は不均一なリストを安全にコード化するだけでなく、それが型付けするリストの長さを限定するおかげで、従来のシンプルな配列よりもはるかに型の安全性を保つことを可能にします。