この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - TypeScript タイプパズル
27. implement Flat<T>
解答例:
type Flat<T extends any[]> = T extends [infer Head, ...infer Tail] ? [...(Head extends any[] ? Flat<Head> : [Head]), ...Flat<Tail>] : [];// テストtype A = Flat<[1,2,3]>; // [1,2,3]type B = Flat<[1,[2,3], [4,[5,[6]]]]>; // [1,2,3,4,5,6]type C = Flat<[]>; // []
解説:
Flat<T>
は、Tuple 型T
を平坦化する型を表します。- 入力 Tuple 型
T
を、先頭の要素Head
とそれ以外の要素の Tuple 型Tail
に分割します。 Head
が Tuple 型である場合は再帰的にFlat<Head>
を適用します。それ以外の場合は[Head]
として配列に変換します。- 配列の結合演算子
...
を使って[Head]
またはFlat<Head>
とFlat<Tail>
を連結して新しい Tuple 型を作成します。 Tail
の要素がなくなるまで、再帰的にこの演算を繰り返し、最終的に平坦化された Tuple 型を返します。空の Tuple 型の場合は[]
を返します。