この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - TypeScript タイプパズル
29. implement Shift<T>

解答例:

type Shift<T extends any[]> = T extends [any, ...infer R] ? R : []

説明:

  • Shiftという汎用型を宣言します。引数として、tuple type T を受け取ります。ただし、 Tany[]型の一部である必要があります。
  • 次に、 T の要素のうち、最初の要素を除外する方法を考えます。 「可変サイズのジェネリックス」の機能を使うことで、これを実現できます。 ジェネリックス infer を使用することができます。
  • infer は、 T の残りのすべての要素を表す、ジェネリックスの変数として宣言されます。 そのため Shift<[1,2,3]>の場合 R には[2,3]が入ります。
  • トリックは [any, ...infer R] を使うことです。これは、名前付きの引数を1つ持ち、最初の要素を any 型にプルして、残りの型を可変サイズのタプル(ジェネリックス変数R)に押し込めるという意味です。もし T が空の配列であれば、戻り値は空の配列である [] を返します。