この解答例は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が空の配列であれば、戻り値は空の配列である[]を返します。