DRILL 08 / 再利用とデータ構造
ジェネリクス
入力の要素型を保ったまま、複数の型で使える関数を定義します。
COURSE ROUTETypeScript Foundation
0 / 8
YOUR TASK
lastOrNull() を完成させる
読み取り専用配列の末尾要素を返してください。空配列の場合は null を返します。要素型を失わないジェネリック関数にします。
- 入力
- values は任意の要素型を持つ読み取り専用配列です。
- 出力
- 末尾要素を元の型のまま返し、空配列なら null を返します。
BEFORE CODING
配列の要素型を戻り値へ引き継ぐ
関数を number[] と string[] の両方で使いたくても、戻り値を any にすると呼び出し元で型が分からなくなります。型変数 T を入力と出力に使うと、渡した配列の要素型を戻り値まで保てます。
lastOrNull([10, 20]) → number | null T は呼び出し時に決まる
number[] を渡せば T は number、string[] を渡せば T は string です。実装を一つに保ったまま、戻り値の型を具体的にできます。
空配列の結果を型に含める
要素がない配列には末尾値がありません。先に長さを判定して 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 後に解説が開きます
まずは自分の言葉で方針を説明し、コードに落としてみましょう。