Implement the generic version of
Array.push
實現陣列的泛型版本 push
方法
Implement the generic version of
Array.unshift
實現陣列的泛型版本 unshift
方法。
type Result = Push<[1, 2], '3'> // [1, 2, '3']
type Result1 = Unshift<[1, 2], 0> // [0, 1, 2]
接下來,你的任務是讓下面的type cases測試通過:
type cases = [
Expect<Equal<Push<[], 1>, [1]>>,
Expect<Equal<Push<[1, 2], '3'>, [1, 2, '3']>>,
Expect<Equal<Push<['1', 2, '3'], boolean>, ['1', 2, '3', boolean]>>,
]
type cases1 = [
Expect<Equal<Unshift<[], 1>, [1]>>,
Expect<Equal<Unshift<[1, 2], 0>, [0, 1, 2]>>,
Expect<Equal<Unshift<['1', 2, '3'], boolean>, [boolean, '1', 2, '3']>>,
]
從以下幾個方向來思考:
Push
: Array
實例的 push()
方法將指定的元素添加到陣列的末尾。Unshift
: Array
實例的 unshift()
方法將指定的元素添加到陣列的開頭。解法:
type Push<T extends unknown[], U> = [...T, U]
type Unshift<T extends any[], U> = [U, ...T]
細節分析:
泛型參數 (Generic Parameters):
T extends unknown[]
:這表示 T
是一個陣列,且可以包含任何類型的元素。使用 extends unknown[]
限制 T
必須是陣列,但不限制其中的元素類型。U
是需要添加的目標元素 (target element),可以是任意類型。擴展陣列的結構 (Array Structure Expansion):
Push
: 使用展開語法 [...T, U]
將目標元素 U
添加到陣列 T
的末尾,。使得 U
成為新的最後一個元素,並保持原陣列的結構不變。。
Unshift
: 使用展開語法 [U, ...T]
將目標元素 U
添加到陣列 T
的開頭。使得 U
成為新的第一個元素,並保持原陣列的結構不變。
這樣,我們就能順利通過測試啦 🎉 😭 🎉
未來補充 😭
未來補充 😭
本次介紹了 Push
和 Unshift
的實作,下一關會挑戰 Parameters
,期待再相見!