- TypeScript+Vue.js前端開發從入門到精通
- 張益琿編著
- 1215字
- 2024-12-30 15:12:15
2.3.1 枚舉類型

枚舉類型是TypeScript對JavaScript標準數據類型的一個補充。當值域限定在一定范圍內時,或者說當值域從有限個選項中進行選擇時,使用枚舉是非常合適的。例如某個操作的結果只有成功和失敗兩種,即可使用枚舉來定義此操作結果的數據類型。又比如每周只有7天,每年只有12個月,在這類場景下,我們都可以使用枚舉類型。
在TypeScript中,使用enum關鍵字來定義枚舉。示例如下:
【源碼見附件代碼/第2章/6.enum/6.enum.ts】

如上面的代碼所示,我們定義了一個名為Result的新類型,此類型本身是枚舉類型,其中定義了兩個枚舉值,Success表示成功,Fail表示失敗。默認情況下,我們定義的枚舉都是數字枚舉,并且首個枚舉的值為0,后續依次遞增。TypeScript也支持自定義數字枚舉的枚舉值,也支持定義字符串枚舉,后面會介紹。Result枚舉的使用示例如下:
【源碼見附件代碼/第2章/6.enum/6.enum.ts】
var res:Result = Result.Success; //將輸出:0 console.log(res);
我們也可以手動設置枚舉的初始值,示例如下:
【源碼見附件代碼/第2章/6.enum/6.enum.ts】

此時Success的值為10,Fail的值自動遞增至11。當然,我們也可以對所有值都進行設置,示例如下:
【源碼見附件代碼/第2章/6.enum/6.enum.ts】

在使用時枚舉可以直接使用枚舉名,這樣的好處是使代碼的可讀性變得很強,以上面的Result為例,如果操作結果返回一個數值,可能會使調用方對數值的意義感到疑惑,如果返回Result枚舉值,則意義就非常明了了。
下面我們來看字符串枚舉,字符串枚舉是指枚舉值會對應一個具體的字符串數據,示例如下:
【代碼片段2-6 源碼見附件代碼/第2章/6.enum/6.enum.ts】

字符串枚舉不僅使代碼的可讀性增強了,也會使運行時的輸出信息更加可讀。
理論上講,枚舉項的值有兩種定義方式,一種是采用常量來定義,另一種是采用計算量來定義。在以下場景中,枚舉值是以常量的方式定義的。
(1)枚舉的首個枚舉項沒有初始化,其會被默認賦值為0,并且其后的枚舉項的值會依次遞增。示例如下:
【源碼見附件代碼/第2章/6.enum/6.enum.ts】

(2)當前枚舉項沒有初始化,并且其前一個枚舉項是一個數字常量,則此枚舉項的值在上一個枚舉項的基礎上加1。示例如下:
【源碼見附件代碼/第2章/6.enum/6.enum.ts】

(3)當前枚舉項進行了初始化,且初始化使用的是常量表達式,包括數字常量、字符串常量,其他常量定義枚舉值,應用了+、?、~這類一元運算符的常量表達式以及應用了+、?、*、/、%、<<、>>、>>>、&、|、^的常量表達式。示例如下:
【源碼見附件代碼/第2章/6.enum/6.enum.ts】

對于常量定義的枚舉,在TypeScript編譯時,其會被編譯成對應的常量值。除上述所列舉的情況外,使用函數或表達式包含變量的枚舉定義方式都被稱為計算量定義方式。示例如下:
【源碼見附件代碼/第2章/6.enum/6.enum.ts】

上面代碼枚舉中的C枚舉項就是計算量定義的,編譯時其會直接被編譯成計算表達式,而不是常量。需要注意,此處所涉及的常量枚舉和計算量枚舉只會影響編譯的結果,對于枚舉值本身來說,這只會影響枚舉值是在編譯時確定還是在運行時確定,但是枚舉的值一旦確定,就不會隨其表達式中包含的變量的更改而更改。以上面的Rank枚舉為例,下面的代碼兩次輸出的值不變。
【源碼見附件代碼/第2章/6.enum/6.enum.ts】
//20 console.log(Rank.C); mut = 30; //20 console.log(Rank.C);
- GraphQL學習指南
- vSphere High Performance Cookbook
- Java入門很輕松(微課超值版)
- Swift 3 New Features
- Apex Design Patterns
- Python完全自學教程
- 自然語言處理Python進階
- PhoneGap:Beginner's Guide(Third Edition)
- Android底層接口與驅動開發技術詳解
- Java語言程序設計教程
- 平面設計經典案例教程:CorelDRAW X6
- 后臺開發:核心技術與應用實踐
- Go語言從入門到精通
- Application Development with Parse using iOS SDK
- 軟件測試分析與實踐