TypeScriptのGenericsとは?型を再利用する強力な仕組み – 10/13

前回の記事では interface と type の違い を解説しました。

TypeScriptでは

  • interface
  • type

を使ってデータ構造を定義できます。

しかし実務では次のような問題が発生します。

似た型が大量に増える

例えば

  • User配列
  • Product配列
  • Post配列

などです。

この問題を解決する仕組みが Generics(ジェネリクス) です。

この記事では次の内容を解説します。

  • Genericsとは
  • Genericsの基本
  • 配列での利用
  • 関数での利用
  • 実務での利用

Genericsとは

Genericsとは

型をパラメータとして扱う仕組み

です。

通常の関数を見てみましょう。

“`ts id=”g5m9e0″
function identity(value: string): string {
return value
}

この関数は

string

しか扱えません。

もし数値を扱いたい場合

ts id=”n2g4f5″
function identityNumber(value: number): number {
return value
}

という別の関数を作る必要があります。

これは非常に非効率です。

Genericsを使うと、これを **1つの関数で実現できます。**

---

# Genericsの基本

Genericsは次のように書きます。

ts id=”u7dfgx”
function identity(value: T): T {
return value
}

ここでの

id=”xqg4pc”
T

は **型パラメータ**です。

この関数は次のように使えます。

ts id=”l9h7y0″
identity(“hello”)
identity(10)
identity(true)

つまり

string
number
boolean

すべて同じ関数で扱えます。

---

# Genericsのイメージ

Genericsは

型のテンプレート

のようなものです。

例

ts id=”kp4tci”
function print(value: T): T {
return value
}

Tの部分に

* string
* number
* object

などが入ります。

---

# 配列とGenerics

Genericsは配列でも使われています。

例えば

ts id=”hz7c08″
Array

これは

id=”de3w3n”
number型配列

です。

実は

ts id=”cf3y26″
number[]

も同じ意味です。

---

# Generics関数の実用例

Genericsは次のような関数でよく使われます。

ts id=”7i8kn7″
function first(array: T[]): T {
return array[0]
}

使用例

ts id=”hmp5x9″
first([1,2,3])
first([“A”,”B”,”C”])

この関数は

* number配列
* string配列

どちらでも使えます。

---

# Genericsとオブジェクト

Genericsはオブジェクト型でも使えます。

例

ts id=”vcz7ah”
function wrap(value: T) {
return { value }
}

使用例

ts id=”y3m4u2″
wrap(10)
wrap(“hello”)

結果

id=”s1w7nq”
{ value: 10 }
{ value: “hello” }

になります。

---

# Genericsの実務例

実務では次のような場面で使われます。

---

## APIレスポンス

例

ts id=”6f3mne”
type ApiResponse = {
data: T
status: number
}

使用

ts id=”s0ghp8″
type UserResponse = ApiResponse

---

## React Hooks

ReactでもGenericsが使われています。

ts id=”5n0q6t”
useState(0)

これは

id=”9o0v27″
stateの型

を指定しています。

---

## データ処理関数

ts id=”w9my3c”
function mapArray(items: T[]): T[] {
return items
}

---

# Genericsのメリット

Genericsのメリットは次の通りです。

---

## 再利用性

同じ関数を複数の型で使えます。

---

## 型安全

anyを使わずに柔軟な型を作れます。

---

## コード削減

似た関数を何個も作る必要がありません。

---

# Genericsの注意点

Genericsは便利ですが、使いすぎると

コードが複雑

になります。

基本は

必要な部分だけ使う

ことが重要です。

---

# まとめ

この記事では **TypeScriptのGenerics** を解説しました。

重要なポイント

* Genericsは型パラメータ
* 型を再利用できる
* 関数や配列で使われる
* API設計で重要

GenericsはTypeScriptの中でも非常に強力な機能です。

理解すると

コードの再利用性
“`

が大きく向上します。


次の記事

次回は

TypeScriptとReact

を解説します。

ReactではTypeScriptが非常によく使われており、

  • props型
  • state型
  • event型

などを定義します。

コメント

タイトルとURLをコピーしました