TypeScript 列舉enum
通過列舉可以給數字以更加易懂的名字;使用enum定義。
程式碼例項如下:
[typescript] 純文字檢視 複製程式碼enum Color { blue, red, yellow }
以上程式碼宣告一個列舉型別,具有三個成員;預設情況下,從0開始為元素編號,並且依次遞增1。
也可以手動指定列舉成員的值,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼enum Color { blue=2, red=3, yellow=5 }
上面程式碼對成員全部手動指定值,也可以部分指定,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼enum Color { blue=2, red, yellow=5 }
blue後面的值,也會依次遞增1,直至手動指定成員。
可以由列舉值得到列舉成員的名字,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼enum Color { blue, red, yellow } let colorName: string = Color[2];//colorName值是yellow
雖然列舉是數字命名,但是不同的列舉型別之間賦值是不允許的,截圖如下:
特別說明:TypeScript 2.4支援列舉成員變數包含字串,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼enum Color { Red = "RED", Green = "GREEN", Blue = "BLUE", }
字串列舉成員不能被反向對映到列舉成員的名字。
列舉成員的值:
一個列舉型別可以包含零個或多個列舉成員。
列舉成員具有一個數字值,可以是常數或是計算得出的值 當滿足如下條件時,列舉成員被當作是常數:
(1).沒有初始化的成員,且之前的列舉成員值是常數,程式碼如下:
[typescript] 純文字檢視 複製程式碼enum Color { blue=1, red, yellow }
red沒有初始化,但是它前面的成員值是常數1,所以它的值也是常數(遞增1)。
第一個列舉成員如果沒有初始化,那麼它的預設值是0。
(2).列舉成員值是常數表示式,滿足以下條件之一即可認為是常數列舉表示式:
數字字面量:
[typescript] 純文字檢視 複製程式碼enum Color { blue, red=2, yellow }
2是一個數字字面量,是一個常數列舉表示式。
引用已定義的常數列舉成員:
使用已經定義的常數列舉成員的值初始化,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼enum Color { blue, red=2, yellow=red }
在同一個列舉型別中定義的,無需使用限定名,再來看一段程式碼例項:
[typescript] 純文字檢視 複製程式碼enum Color { blue, red=2, yellow } enum Antzone{ webName, address, age=Color.red }
不同的列舉型別,引用則需要使用限定名。
帶括號的常數列舉表示式:
[typescript] 純文字檢視 複製程式碼enum Color { blue, red=(2), yellow }
+, -, ~ 一元運算子應用於常數列舉表示式:
[typescript] 純文字檢視 複製程式碼enum Color { blue, red=+2, yellow }
+, -, *, /, %, <<, >>, >>>, &, |, ^ 二元運算子:
[typescript] 純文字檢視 複製程式碼enum Color { blue, red=1+2, yellow }
常數列舉表示式做為其一個操作物件,若常數列舉表示式求值後為 NaN或Infinity,則會在編譯階段報錯。
[typescript] 純文字檢視 複製程式碼enum Color { blue="螞蟻部落".length }
blue的值就是計算得出的值。
常數列舉:
在enum關鍵字前使用const修飾符,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼const enum Color { blue, red, yellow }
常數列舉只能使用常數列舉表示式並且不同於常規的列舉的是它們在編譯階段會被刪除。 常數列舉成員在使用的地方被內聯進來。 這是因為常數列舉不可能有計算成員,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼const enum Color { blue, red, yellow } let colorArray = [Color.blue, Color.red, Color.yellow]
上面程式碼編譯後截圖如下:
外部列舉:
外部列舉用來描述已經存在的列舉型別的形狀,程式碼如下:
[typescript] 純文字檢視 複製程式碼declare enum Enum { A = 1, B, C = 2 }
外部列舉和非外部列舉之間有一個重要的區別,在正常的列舉裡,沒有初始化方法的成員被當成常數成員。 對於非常數的外部列舉而言,沒有初始化方法時被當做需要經過計算的。
相關文章
- 聊聊TypeScript中列舉物件(Enum)TypeScript物件
- Java 列舉(enum)Java
- 【python】Enum 列舉類Python
- ENUM列舉型別型別
- 再談java列舉enumJava
- Java - Enum 列舉型別Java型別
- Java 列舉 enum 詳解Java
- Java —— 列舉類(enum 類)Java
- Rust的列舉型別EnumRust型別
- TypeScript 列舉指南TypeScript
- Java enum列舉類詳解 列舉的常見用法Java
- 聊一聊Java的列舉enumJava
- 從JDK角度認識列舉enumJDK
- Java列舉enum可以有抽象方法! -RecepİnançJava抽象NaN
- 使用列舉ENUM替換Switch或If-Else
- Java列舉:小小enum,優雅而乾淨Java
- Java列舉型別enum的詳解及使用Java型別
- PLC結構化文字(ST)——隱式列舉(implicit enum)
- Enum列舉型別實戰總結,保證有用!型別
- Java 列舉(enum) 詳解7種常見的用法Java
- 優雅使用前端列舉Enum,符合國標的那種!前端
- 資料結構複習-01enum列舉型別資料結構型別
- 簡單探討TypeScript 列舉型別TypeScript型別
- TypeScript魔法堂:列舉的超實用手冊TypeScript
- 【C/C++】C和C++11之enum列舉的使用細節C++
- TypeScript 中列舉型別的理解?應用場景?TypeScript型別
- 為什麼使用列舉作為配置項(enum as configuration)是反開發模式的模式
- Java 列舉、JPA 和 PostgreSQL 列舉JavaSQL
- 列舉
- 列舉和列舉的取值範圍
- C# enum列舉為0的時候不需要強制轉換,很容易掉坑C#
- Enumeration列舉
- 列舉類
- Java列舉Java
- scala 列舉
- C# 列舉與位列舉概述C#
- 列舉比較
- 列舉型別型別