この解答例は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 型の場合は [] を返します。