Day 4 - TypeScript 核心語法 (2):union、enum
昨天我們介紹了基本型別,今天要進一步學會 Union Type(聯合型別) 和 Enum(列舉)。
這次一樣用「搭火車」的例子 🚄,讓程式碼更貼近生活!
1. Union Type(聯合型別)
Union 的特色是用 |
將多種可能型別區分開來。
當一個值可能有「多種型別」時,Union 非常好用。
搭火車範例:乘客的票號
1 | let ticketId: number | string; |
常見搭配:型別守衛 (Type Guards)
在使用 Union 時,我們通常需要用 typeof
來判斷型別後再操作,避免出錯。
1 | function printTicketId(id: number | string) { |
Union Type 補充說明 🚉
- 優點:
- 適合處理「多種可能型別」的情境,例如 API 回傳值 或 使用者輸入。
- 可以搭配 Type Guards 提高安全性。
- 常見使用場景:
- 車票 ID(可能是數字 / 字串)
- 車廂座位(可能是 “A12” 也可能是 12)
- 付款方式(可能是 “現金” | “信用卡” | “行動支付”)
1 | type PaymentMethod = "Cash" | "CreditCard" | "MobilePay"; |
2. Enum(列舉)
Enum 適合定義「固定範圍內的值」,比 Union 更有「名稱 → 值」的對應關係。
搭火車範例:車票狀態
1 | enum TicketStatus { |
Enum + 陣列應用:乘客清單
1 | let passengers: { name: string; status: TicketStatus }[] = []; |
Enum 設定字串值(更直觀)
1 | enum TrainClass { |
Enum 補充說明 🚆
- 優點:
- 讓「固定選項」更清楚(比字串常數更有語意)。
- 避免拼錯字串(TS 編譯時就會檢查錯誤)。
- 可讀性高,適合大型專案。
- 常見使用場景:
- 票券狀態(已購買 / 未購買 / 已使用 / 過期)
- 列車種類(自強號 / 區間車 / 高鐵)
- 座位等級(普通 / 商務 / 頭等)
小結
- Union Type:讓一個變數可以有多種型別,常用於「票號、付款方式」這類不確定型別的場景。
- Enum:讓「固定範圍的值」更有語意,常用於「票券狀態、列車種類、座位等級」。
- Union 靈活,Enum 嚴謹 —— 搭配使用可以讓程式碼更乾淨又安全。
👉 明天(Day 5)我們會介紹 interface 和 type,讓我們的火車旅程更結構化! 🚉