メインコンテンツにスキップ
モジュール 1 · レッスン 2 / 2コース内の 2/14~10 min
モジュールのレッスン (2/2)

配列とタプル

JavaScript では、配列にあらゆるタイプの要素を含めることができ、動的に拡大または縮小できます。 TypeScript は静的型チェックを追加して、コレクションが同種であること、または固定型構造を尊重していることを確認します。


配列 (同種のコレクション)

TypeScript では、同じ型の要素を含む配列の型を定義する同等の方法が 2 つあります。

  1. 要素タイプの後に角括弧を続ける ([]):

    TS
    const numbers: number[] = [1, 2, 3];
    const strings: string[] = ['a', 'b', 'c'];
  2. 汎用 Array<T> 型を使用します。

    TS
    const numbers: Array<number> = [1, 2, 3];

どちらの構文も完全に有効ですが、最初の構文 (type[]) が従来の最も一般的なスタイルです。無効な値 (number[] 配列の numbers.push("hello") など) を挿入しようとすると、TypeScript はコンパイル時エラーを生成します。


タプル (固定長配列)

タプルは、固定数の要素を持つ特別なタイプの配列であり、各要素はその位置に基づいて事前定義された特定の型を持ちます。

たとえば、ステータス コード (数値) とメッセージ (文字列) で構成される HTTP 応答を保存するには、次のようにします。

TS
const response: [number, string] = [200, 'OK'];

この場合:

  • 最初の要素 (response[0]) は number である必要があります。
  • 2 番目の要素 (response[1]) は string である必要があります。
  • 配列は正確に 2 つの要素で初期化する必要があります。

読み取り専用タプル (readonly)

TypeScript のタプルに関する重要な点は、実行時にはタプルが通常の JavaScript 配列であるということです。これは、.push() や .pop() のような変更メソッドが技術的に利用可能であり、型チェックを部分的にバイパスしてタプルの長さを変更できる可能性があることを意味します。

この動作を防止し、真の不変性を強制するには、readonly 修飾子を使用できます。

TS
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!

自分で試してみてください

演習 1: 数値の配列

運動#ts.m1.l2.e1
試行回数: 0読み込み中…

数値のみを含み、値 90、85、および 95 で初期化される、score という名前の配列を宣言します。配列には明示的な型アノテーションを使用します。 any タイプは使用しないでください。

エディターを読み込み中…
ヒントを表示

const スコアの構文を使用します:number[] = ... または Array<number>。

3 回の試行後に解決策が利用可能になります

演習 2: 3D 座標タプル

運動#ts.m1.l2.e2
試行回数: 0読み込み中…

3D 座標 (X、Y、Z の 3 つの数値) を表し、値 10、20、30 で初期化される point という名前のタプルを宣言します。明示的な型アノテーションを使用します。

エディターを読み込み中…
ヒントを表示

タプルのタイプは [数値、数値、数値] である必要があります。

3 回の試行後に解決策が利用可能になります

演習 3: 位置情報タプル

運動#ts.m1.l2.e3
試行回数: 0読み込み中…

地理座標をその名前で表す locationInfo という名前のタプルを宣言します。緯度 (数値)、経度 (数値)、都市名 (文字列) が含まれている必要があります。値 41.9028、12.4964、および「Rome」を使用して初期化します。

エディターを読み込み中…
ヒントを表示

構文を使用して、[数値、数値、文字列] の 3 つの要素を含むタプルを定義します。

3 回の試行後に解決策が利用可能になります

演習 4: ログ エントリ タプル

運動#ts.m1.l2.e4
試行回数: 0読み込み中…

ログ行を表す logEntry という名前のタプルを宣言します。タイムスタンプ (数値)、重大度レベル (文字列)、エラー メッセージ (文字列) を順に含める必要があります。タイムスタンプ 1716300000、レベル 'INFO'、およびメッセージ 'Application starting' を使用して初期化します。

エディターを読み込み中…
ヒントを表示

構文を使用して 3 要素タプル [number, string, string] を定義し、指定された値を割り当てます。

3 回の試行後に解決策が利用可能になります