iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
JavaScript

TypeScript Type Challenges 冒險篇章:30 天闖關之旅,type 簡單了?你確定?系列 第 12

第12關:Push + Unshift!TypeScript 貪食蛇:如何靈活控制陣列頭尾

  • 分享至 

  • xImage
  •  

第12關:Push + Unshift

關卡簡介

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']>>,
]

冒險指南:

從以下幾個方向來思考:

  1. 什麼是Push: Array 實例的 push() 方法將指定的元素添加到陣列的末尾
  2. 什麼是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 成為新的一個元素,並保持原陣列的結構不變。

這樣,我們就能順利通過測試啦 🎉 😭 🎉

其他補充:

未來補充 😭

關鍵字補給:

未來補充 😭

總結:

本次介紹了 PushUnshift 的實作,下一關會挑戰 Parameters,期待再相見!


上一篇
第11關:Includes!TypeScript 包青天:元素不見立刻判決,無情 false
下一篇
第13關:Parameters!TypeScript Expecto Patronum : "疾疾,參數現身"
系列文
TypeScript Type Challenges 冒險篇章:30 天闖關之旅,type 簡單了?你確定?13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言