UNIT 4 講義ルート

DRILL 08 / 再利用とデータ構造

ジェネリクス

入力の要素型を保ったまま、複数の型で使える関数を定義します。

目安 10分 TypeScript generic / readonly array
COURSE ROUTETypeScript Foundation
0 / 8
MISSION 08講義ルートを確認
  1. UNIT 1 · DRILL 01基本型OPEN
  2. UNIT 1 · DRILL 02関数OPEN
  3. UNIT 2 · DRILL 03配列OPEN
  4. UNIT 2 · DRILL 04オブジェクトOPEN
  5. UNIT 3 · DRILL 05ユニオン型OPEN
  6. UNIT 3 · DRILL 06タプルOPEN
  7. UNIT 4 · DRILL 07MapOPEN
  8. UNIT 4 · DRILL 08ジェネリクスACTIVE

YOUR TASK

lastOrNull() を完成させる

読み取り専用配列の末尾要素を返してください。空配列の場合は null を返します。要素型を失わないジェネリック関数にします。

入力
values は任意の要素型を持つ読み取り専用配列です。
出力
末尾要素を元の型のまま返し、空配列なら null を返します。

BEFORE CODING

配列の要素型を戻り値へ引き継ぐ

関数を number[] と string[] の両方で使いたくても、戻り値を any にすると呼び出し元で型が分からなくなります。型変数 T を入力と出力に使うと、渡した配列の要素型を戻り値まで保てます。

lastOrNull([10, 20]) → number | null
01

T は呼び出し時に決まる

number[] を渡せば T は number、string[] を渡せば T は string です。実装を一つに保ったまま、戻り値の型を具体的にできます。

02

空配列の結果を型に含める

要素がない配列には末尾値がありません。先に長さを判定して null を返し、戻り値の型にも T | null と明記します。

SYNTAX RECALL

確認する構文

function first<T>(values: readonly T[]): T | null {
  return values[0] ?? null;
}
  • <T> で呼び出しごとの要素型を受け取る
  • readonly T[] で入力配列を変更しない
  • 戻り値へ null の可能性を含める

STEPWISE HINTS

ヒント

01最初の一手

関数名の後ではなく、関数名の前に `<T>` を置きます。

02処理の組み立て

末尾の添字は `values.length - 1` です。

03コードの形

空配列を先に判定して null を返すと、残りの処理が明確になります。

AFTER ACCEPTED

解説

AC 後に解説が開きます

まずは自分の言葉で方針を説明し、コードに落としてみましょう。