この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - TypeScript タイプパズル
50. implement Sort<T>
type LargerThan<A extends number, B extends number> = A extends B ? false : A extends B ? true : B extends A ? false : true;type SmallerThan<A extends number, B extends number> = LargerThan<B, A>;type Sort<T extends number[]> = T extends [infer A, infer B, ...infer R] ? [...Sort<Extract< A[] | B[], number[]>>, ...Sort<Extract<R, number[]> >] : T;
Sort<T>
はジェネリック型T
の要素を昇順に並べ替えるために使用されます。 このタイプでは、配列を受け取り、配列内の要素を昇順に並べ替える新しい配列を返します。
新しい配列を作成するために、Sort<T>
の主な機能は条件付き型を使用して拡張され、LargerThan<A, B>
およびSmallerThan<A, B>
を再利用して、配列要素を比較します。昇順に並べ替えるために再帰的に呼び出されたSort<Extract<A[] | B[], number[]>>
が使用されます。
T extends [infer A, infer B, ...infer R] ?
は、タプル型T
が少なくとも2つの要素を持つことを保証するために使用されます。...Sort<Extract<R, number[]> >
は、残りの要素に対して再帰的にSort
を呼び出すために使用されます。
最後に、[...Sort<Extract< A[] | B[], number[]>>
の結果と...Sort<Extract<R, number[]> >]
をスプレッド構文を使用して連結して1つの配列を作成します。
例として、 Sort<[100, 9, 20, 0, 0 55]>
関数を使用して、 [0, 0, 9, 20, 55, 100]
の返り値を期待します。