この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - TypeScript タイプパズル
10. Parameters<T> を実装する
解答例:
type MyParameters<T> = T extends (...args: infer P) => any ? P : never;
MyParameters<T>
は、Tが引数を取る関数の型であれば、その引数の型をタプルとして返すようになっています。具体的には、infer
というキーワードを使うことで、引数の型をP
として取得し、(...args: infer P) => any
という形で関数型を表します。ただし、T
が関数型でない場合、この条件に合致しないため、never
型が返されます。
例えば、Foo
型は関数型で、(a: string, b: number, c: boolean) => string
という引数を取り、文字列を返すように定義されています。MyParameters<Foo>
は、[string, number, boolean]
という型を返し、A
型には[string, number, boolean]
が代入されます。また、B
型は、A
型の最初の要素であるstring
型になります。
一方、{a: string}
という型は関数型ではないため、C
型はエラーとなります。