この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - TypeScript タイプパズル
29. implement Shift<T>
解答例:
type Shift<T extends any[]> = T extends [any, ...infer R] ? R : []
説明:
Shift
という汎用型を宣言します。引数として、tuple typeT
を受け取ります。ただし、T
はany[]
型の一部である必要があります。- 次に、
T
の要素のうち、最初の要素を除外する方法を考えます。 「可変サイズのジェネリックス」の機能を使うことで、これを実現できます。 ジェネリックスinfer
を使用することができます。 infer
は、T
の残りのすべての要素を表す、ジェネリックスの変数として宣言されます。 そのためShift<[1,2,3]>
の場合R
には[2,3]
が入ります。- トリックは
[any, ...infer R]
を使うことです。これは、名前付きの引数を1つ持ち、最初の要素をany
型にプルして、残りの型を可変サイズのタプル(ジェネリックス変数R
)に押し込めるという意味です。もしT
が空の配列であれば、戻り値は空の配列である[]
を返します。