First of Array
課題
配列 T
を受け取り、その最初の要素の型を返すような First<T>
を実装してくださ
い。
例:
type arr1 = ["a", "b", "c"];
type arr2 = [3, 2, 1];
type head1 = First<arr1>; // expected to be 'a'
type head2 = First<arr2>; // expected to be 3
解答
Lookup 型を使用して T[0]
と書くことをまず思い付いたかもしれません:
type First<T extends any[]> = T[0];
しかし、ここで考慮すべきエッジケースがあります。空の配列を渡した場合、要素がない
ため T[0]
は期待通り動作しないのです。
そのため、配列の最初の要素にアクセスする前に、配列が空であるかどうかをチェックす る必要があります。これは TypeScript の Conditional 型 によって実現することができます。
Conditional 型の考え方はとてもシンプルです。extends
の左にある型を右側の型に割
り当てることができる場合、true ブランチに入ります。そうでない場合は false ブラン
チに入ります。
配列が空であるかどうかをチェックし、空である場合は何も返さず、その他の場合は配列 の最初の要素を返すようにしましょう:
type First<T extends any[]> = T extends [] ? never : T[0];
コメント