🐈

Type Challengeに入門する

2022/12/20に公開

おはようございます。Type Challengeに入門して4日目です。本日は

 配列`T`を受け取り、その最初のプロパティの型を返す`First<T>`を実装せよ

という問題です。つまり↓のようになります。

typeChallente.ts
 First<['apple', 'banana', 'grape']>
 // expected apple
 First<[() => 'hello', () => 'bye']>
 // expected () => 'hello'
 First<[]>>
 // expected never

早速実装していきます。今日の問題は簡単そうです。配列の0番目を返せばいいだけです。

First.ts
 type First<T extends any[]> = T[0]

これで空配列の場合以外はクリアしました。空配列の場合を考慮する際はConditional Typesを使えばよさそうです。つまり、

 空配列の場合はnever型にして、そうでなければT[0]になる。

というふうな記載をすれば良いので、

First.ts
 type First<T extends any[]> = T extends Array<never> ? never : T[[0]

このように書けばよさそうです。
今回は別解も多かった気がします。また、別解の方がいい回答だなって思ったので、併せてみていきます。

Discussion

ログインするとコメントできます