この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。

BFE.devでのAI解答例 - TypeScript タイプパズル
57. implement ObjectPaths<O>

type ObjectPaths<O, K extends keyof O = keyof O> = K extends string  ? O[K] extends Record<string, any>    ? `${K}.${ObjectPaths<O[K]>}`    : K  : never;type Obj = {  a: {    b: {      c: 1,      d: 2    },    e: 1  },  f: 3}type A = ObjectPaths<Obj>// 'a.b.c' | 'a.b.d' | 'a.e' | 'f'

解説:

  • ObjectPathsは2つの型引数を取ります。ひとつは解析するオブジェクト型、もう一つは再帰的にプロパティを続けるためのキー。つまり、最初はルートオブジェクトについて探索を始めます。
  • 最初のextends句は、Kがstringリテラルであり、KがOのプロパティと互換性があることを確認します。
  • 残りの行で、O[K]がオブジェクトであるかどうかを確認します。オブジェクトであれば、再帰的にObjectPathsを呼び出します。オブジェクトでなければ、キー("K")を返して関数を終了します。
  • TypeScriptの${}構文は、文字列リテラルで一部のテンプレート処理を行うものです。${}にLHSとRHSを渡す必要があります。関数の中で${}を使用することで、再帰的に呼び出された結果を連結することができます。