【朝夕教育】《鴻蒙原生應用開發從零基礎到多實戰》005-TypeScript 中的枚舉

標題詳情
作者簡介愚公搬代碼
頭銜華為云特約編輯,華為云云享專家,華為開發者專家,華為產品云測專家,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.最佳實踐

  1. 優先數字枚舉
    需要反向映射時使用數字枚舉,否則考慮字符串枚舉(更直觀)。
  2. 避免重復值
    防止反向映射時鍵名被覆蓋。
  3. 顯式賦值
    混合類型時明確所有值,減少自動遞增導致的意外行為。
  4. 常量枚舉優化
    使用 const enum 提升性能(編譯時內聯值):
    const enum OptimizedEnum { A=1, B=2 }
    console.log(OptimizedEnum.A); // 編譯后直接輸出1
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71078.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

框架模塊說明 #09 日志模塊_02

背景 上篇我們介紹了系統日志處理方式&#xff0c;也結合我們實際和日志系統集成的需求&#xff0c;將我們的日志文件配置成json格式。這次我們針對我們操作日志的處理進行一些介紹。 還是采用傳統的aop的形式進行操作日志的保存&#xff0c;并按業務類型進行定義保存到mongodb…

DeepSeek-R1自寫CUDA內核跑分屠榜:開啟GPU編程自動化新時代

引言 在AI領域&#xff0c;深度學習模型的性能優化一直是研究者們關注的核心。最近&#xff0c;斯坦福和普林斯頓的研究團隊發現&#xff0c;DeepSeek-R1生成的自定義CUDA內核不僅超越了OpenAI的o1和Claude 3.5 Sonnet&#xff0c;還在KernelBench框架中取得了總排名第一的好成…

記Android12上一個原生bug引起的system_server crash

歡迎使用Markdown編輯器 一. 現象描述 近日測試上報一個幾乎必現的crash&#xff0c;描述如下: 現象: launcher編輯狀態與鎖屏解鎖交互時系統概率性重啟 操作步驟: 進入launcher組件編輯狀態按電源鍵滅屏后亮屏&#xff0c;鎖屏界面上滑解鎖launcher編輯狀態向右或向左滑動重…

系統架構設計師—計算機基礎篇—計算機體系結構

文章目錄 計算機硬件分級存儲體系目的特點 硬件組成CPU運算器控制器 主存儲器 指令系統流水線 內存按字節編址磁盤陣列 計算機硬件 分級存儲體系 寄存器組&#xff08;CPU&#xff09;Cache&#xff08;內存&#xff09;主存Flash&#xff08;外存/輔存&#xff09; 目的 解…

Qt基于等待條件QWaitCondition實現的任務隊列模型示例

核心概念 Qt中的QWaitCondition是一個用于多線程同步的類&#xff0c;允許線程在某些條件滿足時喚醒其他等待的線程。它通常與QMutex配合使用&#xff0c;協調線程之間的執行順序&#xff0c;適用于生產者-消費者模型、任務隊列調度等場景。 ?wait()&#xff1a;使當前線程進…

JAVA實戰開源項目:安康旅游網站(Vue+SpringBoot) 附源碼

本文項目編號 T 098 &#xff0c;文末自助獲取源碼 \color{red}{T098&#xff0c;文末自助獲取源碼} T098&#xff0c;文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

《Qt動畫編程實戰:輕松實現頭像旋轉效果》

《Qt動畫編程實戰&#xff1a;輕松實現頭像旋轉效果》 Qt 提供了豐富的動畫框架&#xff0c;可以輕松實現各種平滑的動畫效果。其中&#xff0c;旋轉動畫是一種常見的 UI 交互方式&#xff0c;廣泛應用于加載指示器、按鈕動畫、場景變換等。本篇文章將詳細介紹如何使用 Qt 實現…

基于 MyBatis-Plus 的多租戶數據隔離方案

?什么是多租戶? 多租戶技術(Multi-Tenancy)是一種軟件架構設計,允許多個用戶(通常為企業或組織)共享同一套系統或應用程序,同時確保各用戶之間的數據隔離。這種技術廣泛應用于 SaaS(軟件即服務)平臺,能夠有效降低運維成本,提高資源利用率。 核心思想:在一臺服務…

8 SpringBootWeb(下):登錄效驗、異步任務和多線程、SpringBoot中的事務管理@Transactional

文章目錄 案例-登錄認證1. 登錄功能1.1 需求1.2 接口文檔1.3 思路分析1.4 功能開發1.5 測試2. 登錄校驗2.1 問題分析2.2 會話技術2.2.1 會話技術介紹2.2.2 會話跟蹤方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技術2.2.3 JWT令牌(Token)2.2.3.…

mysql系列10—mysql鎖

背景 mysql中鎖機制核心是保證數據的一致性以及并發控制。鎖機制的實現與存儲引擎有關&#xff0c;本文介紹的是INNODB存儲引擎的鎖機制&#xff1b;其他存儲引擎如myISAM和memory等僅支持表鎖不支持行鎖&#xff0c;不是本文關注的重點。 本文介紹mysql數據庫提供的鎖機制&am…

Redis7——基礎篇(八)

前言&#xff1a;此篇文章系本人學習過程中記錄下來的筆記&#xff0c;里面難免會有不少欠缺的地方&#xff0c;誠心期待大家多多給予指教。 基礎篇&#xff1a; Redis&#xff08;一&#xff09;Redis&#xff08;二&#xff09;Redis&#xff08;三&#xff09;Redis&#x…

《國密算法開發實戰:從合規落地到性能優化》

前言 隨著信息技術的飛速發展,信息安全已成為全球關注的焦點。在數字化時代,數據的保密性、完整性和可用性直接關系到國家、企業和個人的利益。為了保障信息安全,密碼技術作為核心支撐,發揮著至關重要的作用。國密算法,即國家密碼算法,是我國自主設計和推廣的一系列密碼…

yolov12 部署瑞芯微 rk3588、RKNN 部署工程難度小、模型推理速度快

yolov12 部署又來了。 特別說明&#xff1a;如有侵權告知刪除&#xff0c;謝謝。 完整代碼&#xff1a;包括onnx轉rknn和測試代碼、rknn板端部署C代碼&#xff1a; 【onnx轉rknn和測試代碼】 【rknn板端部署C代碼】 1 模型訓練 yolov12訓練官方開源的已經非常詳細了&#…

windows本地化部署Dify+Deepseek

Windows本地化部署DifyDeepseek 一、下載Docker 前往 Docker 官網 下載 Docker Desktop&#xff0c;按序安裝。 1.1啟用WSL 打開本機的控制面板>程序>啟用或關閉 Windows 功能,勾選: Linux 的 Windows 子系統虛擬機平臺&#xff08;若無該選擇則勾選 Hyper-V &#…

使用Spring Boot與達夢數據庫(DM)進行多數據源配置及MyBatis Plus集成

使用Spring Boot與達夢數據庫(DM)進行多數據源配置及MyBatis Plus集成 在現代企業級應用開發中&#xff0c;處理多個數據源是一個常見的需求。本文將詳細介紹如何使用Spring Boot結合達夢數據庫&#xff08;DM&#xff09;&#xff0c;并通過MyBatis Plus來簡化數據庫操作&…

第二十四:5.2【搭建 pinia 環境】axios 異步調用數據

第一步安裝&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts 改變里面的值的信息&#xff1a; <div class"count"><h2>當前求和為&#xff1a;{{ sum }}</h2><select v-model.number"n">  // .number 這里是…

使用 DeepSeek 生成流程圖、甘特圖與思維導圖:結合 Typora 和 XMind 的高效工作流

在現代工作與學習中&#xff0c;可視化工具如流程圖、甘特圖和思維導圖能夠極大地提升信息整理與表達的效率。本文將詳細介紹如何使用 DeepSeek 生成 Mermaid 文本&#xff0c;結合 Typora 快速生成流程圖和甘特圖&#xff0c;并通過 Markdown 格式生成思維導圖&#xff0c;最終…

DeepSeek 開源周:第五天 - Fire-Flyer 文件系統(3FS)

&#xff08;下面文字主要由 Grok 3 協助生成&#xff09; 概述 Deepseek 今天開源的 Fire-Flyer 文件系統&#xff08;3FS&#xff09;是一個高性能分布式文件系統&#xff0c;專門為 AI 訓練和推理設計。研究表明&#xff0c;它解決了 AI 工作負載中處理海量數據的高效存儲需…

【筆記】論文閱讀方法(AI大模型)

1 為什么讀論文 構建知識體系&#xff1a;通過Related Works快速了解該方向研究現狀&#xff0c;追蹤經典論文 緊跟前沿技術&#xff1a;了解領域內新技術及效果&#xff0c;快速借鑒到自身項目 培養科研邏輯&#xff1a;熟悉論文體系&#xff0c;了解如何創造新事物&#x…

【數據集】ACM數據集

ACM&#xff08;Association for Computing Machinery&#xff09;數據集是計算機科學領域常用于研究學術論文、作者關系、引文網絡、推薦系統、圖神經網絡&#xff08;GNN&#xff09;等任務的數據集之一。該數據集通常包含學術論文、作者、研究領域以及它們之間的關系&#x…