標題 | 詳情 |
---|---|
作者簡介 | 愚公搬代碼 |
頭銜 | 華為云特約編輯,華為云云享專家,華為開發者專家,華為產品云測專家,CSDN博客專家,CSDN商業化專家,阿里云專家博主,阿里云簽約作者,騰訊云優秀博主,騰訊云內容共創官,掘金優秀博主,亞馬遜技領云博主,51CTO博客專家等。 |
近期榮譽 | 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年華為云十佳博主,2023年華為云十佳博主,2024年華為云十佳博主等。 |
博客內容 | .NET、Java、Python、Go、Node、前端、IOS、Android、鴻蒙、Linux、物聯網、網絡安全、大數據、人工智能、U3D游戲、小程序等相關領域知識。 |
歡迎 | 👍點贊、?評論、?收藏 |
文章目錄
- 🚀前言
- 🚀一、TypeScript 中的枚舉
- 🔎1.枚舉基礎概念
- 🔎2.枚舉與數組/對象的對比
- 🔎3.枚舉核心特性
- 🦋3.1 自動編號規則
- 🦋3.2 反向映射(Reverse Mapping)
- 🦋3.3 混合類型枚舉
- 🦋3.4 任意值類型
- 🔎4.注意事項與陷阱
- 🦋4.1 值覆蓋問題
- 🦋4.2 計算項限制
- 🦋4.3 字符串枚舉特性
- 🔎5.最佳實踐
🚀前言
在現代編程中,枚舉是一種非常實用的類型,它可以幫助我們管理和組織一組相關的常量,使代碼更加清晰和易于維護。TypeScript作為一種靜態類型語言,提供了對枚舉的強大支持,使得開發者能夠更有效地定義和使用常量集合。在鴻蒙原生應用開發中,掌握TypeScript中的枚舉,不僅可以提升代碼的可讀性,還能減少出錯的可能性。
本篇文章將深入探討TypeScript中的枚舉類型,包括數字枚舉、字符串枚舉以及異構枚舉的使用方法。通過具體的實例,我們將展示如何在鴻蒙原生應用中靈活運用枚舉,幫助你更好地管理應用中的狀態和選項,使代碼更加簡潔明了。
🚀一、TypeScript 中的枚舉
🔎1.枚舉基礎概念
定義:枚舉(enum
)是 TypeScript 對 JavaScript 的擴展,用于定義一組具名常量集合,支持通過名稱或值雙向訪問,提升代碼可讀性。
🔎2.枚舉與數組/對象的對比
特性 | 數組 | 對象 | 枚舉 |
---|---|---|---|
訪問方式 | 僅通過索引 (arr[0] ) | 鍵名 (obj.key ) | 雙向訪問(鍵名或值) |
值類型 | 任意類型 | 任意類型 | 數字、字符串或混合類型 |
自動編號 | 不支持 | 不支持 | 支持(默認從0開始) |
示例對比:
// 數組:只能通過索引訪問
const arr = ['a', 'b', 'c'];
arr[0]; // ? 'a'
arr['a']; // ? undefined// 對象:通過鍵名訪問
const obj = { a: 'a', b: 'b' };
obj.a; // ? 'a'
obj['a']; // ? 'a'// 枚舉:雙向訪問
enum Color { Red, Green, Blue }
Color.Green; // ? 1(值)
Color[1]; // ? 'Green'(名稱)
🔎3.枚舉核心特性
🦋3.1 自動編號規則
- 默認從
0
開始遞增 - 手動賦值后會基于前一項自動+1
enum Color1 { Red, Green, Blue } // 0,1,2
enum Color2 { Red=1, Green, Blue } // 1,2,3
enum Color3 { Red=1, Green=5, Blue=9 } // 1,5,9
🦋3.2 反向映射(Reverse Mapping)
通過值獲取鍵名(僅適用于數字枚舉):
enum Color4 { Red=1, Green=5, Blue=2 }
console.log(Color4[2]); // 'Blue'
🦋3.3 混合類型枚舉
支持數字、字符串、計算值混合,但需注意:
- 計算項(如表達式、變量)后的成員必須手動賦值
- 字符串成員后不能自動遞增
let a = '123';
enum MixedEnum {Num = 1, // 數字項Str = 'hello', // 字符串項Computed = a.length, // 計算項(值為3)MustAssign = 4 // 必須手動賦值(否則報錯)
}
🦋3.4 任意值類型
通過類型斷言 <any>
允許非標準值,但會破壞自動遞增:
enum SpecialEnum {Red = 1.5, // 小數Green, // 自動+1 → 2.5Blue = <any>'b' // 字符串(需斷言)
}
🔎4.注意事項與陷阱
🦋4.1 值覆蓋問題
手動賦重復值時,后面的值會覆蓋前面的鍵名:
enum OverlapEnum { A=1, B=1, C=2 }
console.log(OverlapEnum[1]); // 'B'(覆蓋了A)
🦋4.2 計算項限制
計算所得項后的成員必須手動初始化:
// ? 合法
enum ValidEnum {A = 1 + 1, // 計算項B = 2 // 手動賦值
}// ? 錯誤:C沒有初始化
enum InvalidEnum {A = '123'.length, // 計算項(值為3)B // Error: Enum member must have initializer
}
🦋4.3 字符串枚舉特性
- 無反向映射
- 后續成員必須手動賦值
enum StringEnum {A = 'Apple',B = 'Banana',// C // ? 必須賦值
}
🔎5.最佳實踐
- 優先數字枚舉
需要反向映射時使用數字枚舉,否則考慮字符串枚舉(更直觀)。 - 避免重復值
防止反向映射時鍵名被覆蓋。 - 顯式賦值
混合類型時明確所有值,減少自動遞增導致的意外行為。 - 常量枚舉優化
使用const enum
提升性能(編譯時內聯值):const enum OptimizedEnum { A=1, B=2 } console.log(OptimizedEnum.A); // 編譯后直接輸出1