課題

Array.unshift() に対応する型を実装してください。

例:

type Result = Unshift<[1, 2], 0>; // [0, 1, 2]

解答

この課題は Push の課題と多くの共通点があります。そこでは、配列 のすべての要素を取得するために Variadic Tuple 型を使用しました。

ここでもほぼ同じことをおこないますが、順序が異なります。まず、入力された配列のす べての要素を取得しましょう:

type Unshift<T, U> = [...T];

このスニペットのままでは、A rest element type must be an array type というコンパ イルエラーが発生します。型変数に対する制約を追加し、エラーを修正しましょう:

type Unshift<T extends unknown[], U> = [...T];

この時点で、入力された配列と同じ配列を得ることができています。あとはタプルの先頭 に要素を追加すれば完成です。やってみましょう:

type Unshift<T extends unknown[], U> = [U, ...T];

以上により、型システムにおいて unshift 関数を実装することができました!

参考