この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - TypeScript タイプパズル
11. ConstructorParameters<T> を実装する
解答例:
type MyConstructorParameters<T extends new (...args: any) => any> = T extends new (...args: infer P) => any ? P : never;
説明:
MyConstructorParameters<T>
は、型引数Tが「new (...args:any) => any」のサブタイプであるという制約付きジェネリック型です。つまり、Tはconstruct signature (constructor function) を持ち、戻り値は何でもよいようにするためです。ここで、 ...args は可変長引数です。また、Pはtuple typeであり、引数の型を含むようにするためです。
条件記法を使用して、型パラメータTが述語「new (...args:any) => any」を満たす場合、Pを引数のtuple typeに割り当てます。
例えば、 MyConstructorParameters<typeof Foo>
は、型TをFooの型に設定し、上記の型定義で置き換えた結果として [string, number, boolean]
となります。