TypeScript 作為 JavaScript 的擴展,能幫助你編寫更安全的程式碼,確保類型的一致性。
透過 TypeScript,你能更早地發現並修復錯誤。其中一個關鍵功能就是枚舉。枚舉在 TypeScript 中是一種常見的結構,可以協助你撰寫更安全、更易維護的程式碼。
本文將深入探討枚舉的概念、如何建立和使用枚舉,以及其他需要注意的重要事項。
什麼是枚舉?
枚舉 (Enum) 是枚舉類型 (Enumeration Type) 的縮寫。它是一種資料類型,由該類型的變數可能採用的不同值來定義。這些可能的值通常被稱為成員或元素。
在本文中,我們將使用「成員」這個詞來指代這些值。枚舉不僅是 TypeScript 的獨有功能,它也存在於其他程式語言中。在 TypeScript 程式中使用枚舉可以提升型別安全。
另請參閱:開發者需要了解的頂級 TypeScript 函式庫和執行環境
為什麼要使用枚舉?
枚舉可以明確指定變數可以儲存的有效值,並限定函式參數可以接受的值。這能確保開發人員始終為變數和函式參數提供預期的數值。這有助於減少錯誤,並讓您撰寫更安全、更健壯的程式碼。
使用枚舉的先決條件
在本教學中,我將示範如何在 TypeScript 中使用枚舉。為了學習本教學,您需要能夠執行 TypeScript 程式碼。
因此,您需要安裝 Node.js 才能執行 JavaScript 程式碼。如果您尚未安裝 TypeScript,下面的影片將引導您如何安裝。
或者,如果您想直接編譯和執行腳本,請使用 ts-node。雖然這是我在本文中採用的方法,但對於大型專案,我建議您完整安裝 TypeScript。若要使用 ts-node 執行腳本,請使用以下命令:
npx ts-node <scriptname>
本文假設您熟悉 JavaScript 和 TypeScript 的基本概念。
使用簡單的枚舉
如何建立簡單的枚舉
在 TypeScript 中,枚舉使用 enum
關鍵字來建立。接著是枚舉的名稱,然後是枚舉包含的成員清單。以下是一個範例,我們宣告了一個代表羅盤四個基本方位的枚舉。
enum Direction { North, East, South, West }
請注意,枚舉中的成員周圍沒有引號,它們不是字串。
如何使用簡單的枚舉
您可以將枚舉值賦予給變數,如下所示:
const heading: Direction = Direction.North;
由於我們在宣告時指定了變數的值,因此 TypeScript 可以自動推斷其資料類型。因此,我們不需要明確指定類型。相反地,我們可以直接寫成:
const heading = Direction.North;
若要查詢 heading
變數的值,我們可以使用 console.log
將其輸出。
console.log(heading);
結果會是:
0
即使我們將 Direction.North
的值賦予了 heading
變數,其值仍然是零。這是因為在建立枚舉時,每個成員都會被賦予一個數值。第一個成員被賦予 0,第二個成員被賦予 1,以此類推。以下是一個示範:
console.log(Direction.North, Direction.East, Direction.South, Direction.West)
因此,您可以透過斷言 heading
變數等於 0 來檢查它是否包含北方。例如:
// 斷言相等 let isNorth = heading == 0; // 列印結果 console.log(isNorth);
如前所述,Direction.North
等於 0。因此,我們可以檢查它是否等於 Direction.North
,而不是檢查 heading
是否等於 0。
// 檢查方向是否為北方 isNorth = heading == Direction.North; // 列印結果 console.log(isNorth);
以上操作都很有用;這很可能就是您使用枚舉值的方式。但是,您可以做更多的事情,稍後您將會看到。下一節將討論如何使用自訂值。
使用自訂值
當您建立枚舉時,TypeScript 會自動為成員分配從零開始的數值。但是,您可能希望您的成員具有自訂值而不是預設值,在這種情況下,您可以自行賦予它們。就像這樣:
enum StarRating { VeryPoor = 1, Poor = 2, Average = 3, Good = 4, Excellent = 5 }
或者,您可以執行以下操作:
enum StarRating { VeryPoor = 1, Poor, Average, Good, Excellent }
在這種情況下,第一個成員將被賦予值 1。後續的成員將從前一個成員的值自動遞增。因此,「差」的評級為 2,「平均」為 3,依此類推。
枚舉中的選項並不總是具有數值,稍後您將會看到。但是,那些具有數值的成員,其行為將如同普通的數字一樣。
console.log(typeof StarRating.Average);
這將列印出 “number”。這意味著您可以執行所有數字運算,包括進行比較,例如:
console.log(StarRating.Excellent > StarRating.Average)
這將會列印出 “true”。
使用字串作為自訂值
如前所述,枚舉選項可以具有字串值,而不僅僅是數字。您可以這樣做:
enum Choice { RedPill = "Know Everything", BluePill = "Know Nothing" }
在這種情況下,枚舉選項的行為將與之前類似。但是,由於值是字串,因此您可以執行字串運算,而不是數字運算,就像上面的範例一樣。
異質枚舉
您還可以混用字串和數值。雖然不建議這樣做,且不太實用,但它仍然是可行的。
enum Mixed { First = "String", Second = 2 }
最後總結
本文中,我們介紹了 TypeScript 中枚舉的概念,並說明了為什麼枚舉很重要。我們還探討了枚舉成員可以擁有的不同類型的值。
接下來,請閱讀我們關於 TypeScript 中型別與介面的文章。