本篇重點
在上一篇教學中,我們介紹了 TypeScript 中的函式、介面與型別別名,這些功能幫助我們更好的組織程式碼並提升型別安全性,接下來本我們繼續進一步探討 TypeScript 中的 Enums(列舉) 和 Tuples(元組),它們能夠幫助你更精確地定義資料結構與型別。
Enums(列舉)
Enums 是 TypeScript 提供的一種特殊型別,用來定義一組具名的常數,Enums 可以讓程式碼更具可讀性。
1. 基本 Enums
最簡單的 Enums 就是數字列舉(Numeric Enums),它會自動為每個成員分配一個從 0 開始的數字值。
1 | enum Direction { |
你也可以手動指定列舉成員的值:
1 | enum Direction { |
2. 字串列舉(String Enums)
除了數字列舉,也能夠使用字串列舉來給,每個成員指定一個字串值。
1 | enum Direction { |
3. 混合列舉(Heterogeneous Enums)
TypeScript 也支援混合列舉,即列舉成員可以同時包含數字和字串值,但這種用法並不常見,通常建議保持列舉成員的一致性。
1 | enum MixedEnum { |
4. 常數列舉(Const Enums)
常數列舉是一種特殊的列舉,它會在編譯時被完全移除,並且在執行時不會產生任何額外的程式碼,只需要在 enum 前加上關鍵字 const 這可以減少程式碼的體積,但會失去一些列舉的動態特性。
1 | const enum Direction { |
5. Enums 的應用場景
Enums 適合用來定義一組固定的值,例如:
- 方向(上、下、左、右)
- 狀態(進行中、已完成、已取消)
- 角色(管理員、編輯者、訪客)
Tuples(元組)
Tuples 是 TypeScript 中的另一種特殊型別,它允許你定義一個固定長度的陣列,並且每個元素的型別可以不同,適合用來處理需要嚴格型別檢查的資料結構。
1. 基本 Tuples
Tuples 的宣告方式與陣列類似,但需要明確指定每個元素的型別。
1 | let user: [string, number, boolean] = ["John", 25, true]; |
2. 可選元素
從 TypeScript 3.0 開始,Tuples 支援可選元素。你可以使用 ? 來標記某個元素是可選的。
1 | let user: [string, number?, boolean?] = ["John"]; |
3. 剩餘元素(Rest Elements)
也支援剩餘元素,你可以將多個元素打包成一個陣列。
1 | let user: [string, ...number[]] = ["John", 1, 2, 3, 4]; |
4. Tuples 的應用場景
Tuples 非常適合用來處理以下情境:
- 函式回傳多個值
- 定義固定長度的資料結構(例如座標、RGB 顏色值)
- 處理需要嚴格型別檢查的資料
1 | function getCoordinates(): [number, number] { |
Enums 與 Tuples 的比較
| 特性 | Enums | Tuples |
|---|---|---|
| 定義方式 | 使用 enum 關鍵字 |
使用 [type1, type2, ...] 語法 |
| 主要用途 | 定義一組具名的常數 | 定義固定長度的陣列,每個元素型別可以不同 |
| 型別檢查 | 嚴格檢查列舉成員的值 | 嚴格檢查每個元素的型別與順序 |
| 應用場景 | 方向、狀態、角色等固定值 | 函式回傳多個值、座標、RGB 顏色值等 |
| 可選元素 | 不支援 | 支援(從 TypeScript 3.0 開始) |
| 剩餘元素 | 不支援 | 支援 |
結論
在本篇中,我們深入探討了 TypeScript 中的 Enums 與 Tuples,包括:
- Enums 的基本使用、字串列舉、混合列舉與常數列舉
- Tuples 的基本使用、可選元素與剩餘元素
- Enums 與 Tuples 的應用場景與比較
這些功能能夠幫助你更精確的定義資料結構與型別,並提升程式碼的可讀性與安全性。