TypeScript: Array.from メソッドで型付き配列の配列を作成する

2024-04-09

TypeScriptで型付き配列の配列を作成する

ジェネリック型を使用すると、配列の要素の型と、内側の配列の要素の型を指定することができます。

type MyArrayType<T> = Array<Array<T>>;

const numbers: MyArrayType<number> = [
  [1, 2, 3],
  [4, 5, 6],
];

const strings: MyArrayType<string> = [
  ["a", "b", "c"],
  ["d", "e", "f"],
];

readonly 修飾子を使用すると、配列を一度作成したら変更できないようにすることができます。

const numbers: readonly Array<readonly number[]> = [
  [1, 2, 3],
  [4, 5, 6],
];

// エラー: 配列を変更しようとしている
numbers[0][0] = 10;

Tuple 型を使用すると、固定長の配列を作成することができます。

const tuple: [number, string, boolean] = [1, "a", true];

// エラー: 配列の長さが合わない
tuple.push(4);

Array.from メソッドを使用すると、既存の配列から新しい型付き配列を作成することができます。

const numbers = [1, 2, 3];

const newNumbers: Array<number> = Array.from(numbers);

// エラー: 配列の要素の型が合わない
newNumbers.push("a");
const numbers = [1, 2, 3];

const newNumbers: Array<string> = numbers.map(n => n.toString());

TypeScriptで型付き配列の配列を作成するには、いくつかの方法があります。 どの方法を使用するかは、要件によって異なります。

補足

  • ジェネリック型を使用すると、コードをより汎用的にすることができます。



ジェネリック型を使用する

type MyArrayType<T> = Array<Array<T>>;

const numbers: MyArrayType<number> = [
  [1, 2, 3],
  [4, 5, 6],
];

const strings: MyArrayType<string> = [
  ["a", "b", "c"],
  ["d", "e", "f"],
];

// 配列の要素にアクセスする
console.log(numbers[0][0]); // 1
console.log(strings[1][2]); // "f"

// 配列をループ処理する
for (const row of numbers) {
  for (const num of row) {
    console.log(num);
  }
}

readonly 修飾子を使用する

const numbers: readonly Array<readonly number[]> = [
  [1, 2, 3],
  [4, 5, 6],
];

// エラー: 配列を変更しようとしている
// numbers[0][0] = 10;

// 配列の要素にアクセスする
console.log(numbers[0][0]); // 1

// 配列をループ処理する
for (const row of numbers) {
  for (const num of row) {
    console.log(num);
  }
}

Tuple 型を使用する

const tuple: [number, string, boolean] = [1, "a", true];

// エラー: 配列の長さが合わない
// tuple.push(4);

// 配列の要素にアクセスする
console.log(tuple[0]); // 1
console.log(tuple[1]); // "a"
console.log(tuple[2]); // true

// 配列をループ処理する
for (const element of tuple) {
  console.log(element);
}

Array.from メソッドを使用する

const numbers = [1, 2, 3];

const newNumbers: Array<number> = Array.from(numbers);

// エラー: 配列の要素の型が合わない
// newNumbers.push("a");

// 配列の要素にアクセスする
console.log(newNumbers[0]); // 1

// 配列をループ処理する
for (const num of newNumbers) {
  console.log(num);
}

map メソッドを使用する

const numbers = [1, 2, 3];

const newNumbers: Array<string> = numbers.map(n => n.toString());

// 配列の要素にアクセスする
console.log(newNumbers[0]); // "1"

// 配列をループ処理する
for (const num of newNumbers) {
  console.log(num);
}



型付き配列の配列を作成する他の方法

const numbers: Array<number> = Array.of(1, 2, 3);

const strings: Array<string> = Array.of("a", "b", "c");

// 配列の要素にアクセスする
console.log(numbers[0]); // 1
console.log(strings[1]); // "b"

スプレッド構文を使用すると、既存の配列を新しい配列に展開することができます。

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

const newNumbers: Array<number> = [...numbers, 4, 5];

// 配列の要素にアクセスする
console.log(newNumbers[0]); // 1
console.log(newNumbers[4]); // 5
const numbers: Array<number> = [1, 2, 3];

const newNumbers: Array<number> = numbers.reduce((acc, num) => {
  acc.push(num);
  return acc;
}, []);

// 配列の要素にアクセスする
console.log(newNumbers[0]); // 1
console.log(newNumbers[2]); // 3

これらの方法は、上記で紹介した方法よりも簡潔にコードを書くことができます。

補足

  • Array.of メソッドは、新しい配列を作成する最も簡単な方法です。

typescript


TypeScriptでオプションパラメータを駆使する:型ガード、デフォルト値、レストパラメータ、オーバーロード、アサーション

オプションパラメータの有無を確認するには、以下の2つの方法があります。型ガードを使用して、パラメータの型を調べることができます。型ガードは、条件式を使用してパラメータの型を絞り込むものです。上記の例では、name パラメータの型を string | undefined にしています。型ガードを使用して、name が undefined でないかどうかを確認しています。...


ReactJSとTypeScriptでrefsを使いこなして開発を効率化

まず、useRefフックを使って、refという変数を初期化します。このコードは、refという変数をHTMLInputElement型で初期化しています。これは、refが常にHTMLInputElement型の値を参照することを保証します。次に、ref変数をDOM要素に渡します。...


TypeScript で列挙型を比較する 4 つの方法とそれぞれの落とし穴

厳格な等価比較 (===)最も基本的な方法は、厳格な等価比較演算子 === を使用することです。これは、2 つの列挙型メンバーが同じ値と型を持つかどうかを比較します。この方法はシンプルで分かりやすいですが、列挙型のメンバーが異なる型の場合は機能しません。...


Angular CLIでコンポーネントを作成して特定のモジュールに追加する方法

Angular CLIがインストールされていることターミナルまたはコマンドプロンプトを使用できることターミナルまたはコマンドプロンプトを開き、プロジェクトディレクトリに移動します。以下のコマンドを実行して、コンポーネントを生成します。<component-name> はコンポーネント名に置き換えます。...


React.js で 'Window' 型のインターフェースを使用して 'window' オブジェクトにアクセス

このエラーの原因は主に以下の2つです。スペルミス: プロパティ名のスペルミスが最も一般的な原因です。型定義ファイルの不一致: 使用している typescript のバージョンや window オブジェクトの型定義ファイルのバージョンが古い場合、window オブジェクトに存在するプロパティが正しく定義されていない可能性があります。...


SQL SQL SQL SQL Amazon で見る



TypeScriptでUnion Typesを使って複数の型を持つ配列を定義する方法

Array<T> 型を使用するArray<T>型は、要素が全て T 型である配列を表します。T には、number、string、boolean などのプリミティブ型や、オブジェクト型、タプル型など、様々な型を指定することができます。any[] 型を使用する