如何使用它的指南

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 中型別與介面的文章。