TypeScript:枚舉類型

1.?什么是枚舉類型?

  • 枚舉(Enum)是TypeScript中一種特殊的數據類型,用于定義一組命名的常量值。它允許開發者用一個友好的名稱來代表數值或字符串,避免使用“魔法數字”或硬編碼值。

  • 基本語法:

enum Direction {Up = 1,   // 數字枚舉,默認從0開始,但可顯式賦值Down,     // 自動遞增為2Left = "LEFT",  // 字符串枚舉Right = "RIGHT"
}
  • 在前端開發中,枚舉常用于管理狀態(如路由狀態、UI狀態)、配置選項(如表單驗證規則)或API響應碼,確保代碼更易于理解和調試。

2.?枚舉的主要類型

  • 數字枚舉(Numeric enums):默認情況下,成員值為從0開始的自增數字。
enum StatusCode {OK = 200,       // 顯式賦值BadRequest = 400,Unauthorized   // 自動為401
}
// 使用:StatusCode.OK 返回 200

優點:簡潔高效;編譯器會生成優化后的JavaScript代碼。

  • 字符串枚舉(String enums):每個成員明確賦值為字符串。
enum UserRole {Admin = "ADMIN",User = "USER",Guest = "GUEST"
}
// 使用:UserRole.Admin 返回 "ADMIN"
優點:提高運行時可讀性,便于日志輸出或API交互。

  • 常量枚舉(Const enums):使用const關鍵字定義,編譯時會被內聯替換,減少運行時開銷。
const enum LogLevel {Error = 0,Warn,Info
}
// 編譯后:LogLevel.Error 直接被替換為 0

優點:性能優化,適合高性能場景如React組件狀態管理。

  • 異構枚舉(Heterogeneous enums):混合數字和字符串值,但較少用,可能降低可讀性。

enum Mixed {Yes = 1,No = "NO"
}

3.?枚舉的用法和最佳實踐

前端開發中的應用場景

  • 狀態管理:在React或Vue中,用枚舉定義組件狀態或Redux action類型。

enum LoadingState {Idle,Loading,Success,Error
}
// 在React中使用:setState(LoadingState.Loading)
  • API處理:統一HTTP狀態碼或錯誤類型。

enum ApiError {NetworkError = 500,ValidationError = 400
}
// 在fetch請求中處理錯誤
  • 配置選項:如表單字段類型或主題設置。

enum Theme {Light = "light",Dark = "dark"
}
document.body.classList.add(Theme.Dark);
  • 優缺點分析

    • 優點

      • 可讀性強:用名稱代替數字/字符串,代碼更語義化。

      • 類型安全:TS編譯器檢查枚舉值的使用,減少運行時錯誤(如拼寫錯誤)。

      • 重構友好:修改枚舉值只需一處定義,自動波及所有引用。

      • 兼容性好:與JavaScript集成無縫,編譯后生成標準對象。

    • 缺點

      • 運行時開銷:非const枚舉會生成額外JavaScript對象,可能影響性能(尤其在低端設備)。

      • 靈活性不足:枚舉值是固定的,不如聯合類型(type Status = 'idle' | 'loading')動態。

      • 潛在問題:字符串枚舉在序列化時可能有歧義;數字枚舉的自增可能導致意外值。

  • 前端最佳實踐

    • 優先使用const枚舉或字符串枚舉以優化性能。

    • 在小型常量集時推薦枚舉;大型或動態集時改用聯合類型或對象字面量。

    • 避免在循環中頻繁訪問枚舉,改用緩存變量。

4.?總結

????????枚舉類型是TypeScript的核心特性之一,尤其在前端開發中,它能顯著提升代碼質量。通過定義一組命名常量,枚舉增強了可維護性、減少錯誤,并簡化了狀態管理和配置。然而,開發者需權衡其優缺點:在需要高性能或動態值時,替代方案如聯合類型可能更優。總體而言,枚舉是前端工程中的利器,推薦在管理固定常量(如狀態碼、角色權限)時積極采用,但需結合項目規模謹慎使用。

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

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

相關文章

Maven 編譯打包一個比較有趣的問題

前言最近做項目,發現一個比較有意思的問題,其實發現了問題的根源還是很好理解,但是如果突然看到會非常的難以理解。在Java項目中,明明包名錯誤了,居然可以正常編譯打包,IDEA報錯了,但是mvn命令正…

Leetcode貪心算法

題目&#xff1a;劃分字母區間 題號&#xff1a;763class Solution {public List<Integer> partitionLabels(String s) {List<Integer> list new LinkedList();int[] edge new int[27];char[] chars s.toCharArray();for(int i 0; i <chars.length;i){edge…

【密碼學基礎】加密消息語法 CMS:給數字信息裝個 “安全保險箱”

如果說數字世界是一座繁忙的城市&#xff0c;那么我們每天發送的郵件、合同、軟件安裝包就是穿梭在城市里的 “包裹”。有些包裹里裝著隱私&#xff08;比如銀行賬單&#xff09;&#xff0c;有些裝著重要承諾&#xff08;比如電子合同&#xff09;&#xff0c;還有些關系到設備…

leetcode算法刷題的第二十天

1.leetcode 39.組合總和 題目鏈接 這道題里面的數組里面的數字是可以重復使用的&#xff0c;那可能就會有人想&#xff0c;出現了0怎么辦&#xff0c;有這個想法的很好&#xff0c;但是題目要求數組里面的數字最小值為1&#xff0c;這就可以讓人放心了。但是有總和的限制&…

使用Spoon報錯Driver class ‘com.microsoft.sqlserver.jdbc.SQLServerDriver‘ could not be found解決方法

使用Spoon報錯Driver class ‘com.microsoft.sqlserver.jdbc.SQLServerDriver’ could not be found 產生原因 出現這個錯誤是因為Spoon無法找到用于連接MS SQL Server的JDBC驅動程序。該驅動程序是一個jar文件,通常需要手動下載并配置。 解決方案 下載JDBC驅動程序: 訪問 M…

【實時Linux實戰系列】基于實時Linux的音頻實時監控系統

在當今數字化時代&#xff0c;音頻監控系統在許多領域都有著廣泛的應用&#xff0c;例如安全監控、工業環境監測、智能交通等。音頻實時監控系統能夠實時采集、分析音頻信號&#xff0c;并在檢測到異常時發出警報&#xff0c;這對于提高安全性、優化生產流程和提升用戶體驗都有…

改造thinkphp6的命令行工具和分批次導出大量數據

文章目錄基本用法傳入參數addArgumentaddOption參數提示導出數據示例準備工作執行導出基本用法 在thinkphp6框架中&#xff0c;自帶了命令行工具&#xff0c;通過配置 config/console.php &#xff0c;添加自定義的命令&#xff1a; return [commands > [//...//新增的自定…

外匯中高頻 CTA 風控策略回測案例

在匯率波動日益頻繁、企業與機構對風險管理要求不斷提高的背景下&#xff0c;外匯交易策略已成為資產配置與對沖操作的重要工具。其中&#xff0c;CTA 策略在外匯交易中具有非常重要的實際應用價值&#xff0c;在風險控制、趨勢捕捉、資金效率與交易實用性之間取得了良好平衡。…

【iOS】內存管理及部分Runtime復習

1.繼承鏈關于繼承鏈存在兩個指針 類的superclass指向父類 父類的sp指向根類 根類的sp指向空 元類的sp指向父類的元類 最終指向根元類 而根元類的sp指向根類 而關于isa指針 對象的isa指針指向它所屬的類 類的isa指針指向元類 元類的isa指針指向根元類 根元類的isa指針指向自己2.…

重置 Windows Server 2019 管理員賬戶密碼

文章目錄前言1. 重置方法2. 重置流程總結前言 之前因為參加華為存儲的 HCIE 培訓和考試&#xff0c;以及在項目上交付和運維&#xff0c;占用了較多的時間和精力&#xff0c;導致很長一段時間沒有去寫博客&#xff0c;前些天登錄 CSDN 博客發現原力已失效&#xff0c;才知道平…

.Net Core Web 架構(管道機制)的底層實現

.Net Core Web 架構(管道機制)的底層實現 .NET Core Web 程序的底層實現是一個復雜的體系&#xff0c;但我們可以將其分解為幾個核心部分來理解。它本質上是一個將 HTTP 請求轉換為開發者代碼執行&#xff0c;并將執行結果返回為 HTTP 響應的精密管道。 下圖清晰地展示了這一處…

計算圖的力量:從 PyTorch 動態圖到 TensorFlow 靜態圖的全景與實戰

計算圖的力量:從 PyTorch 動態圖到 TensorFlow 靜態圖的全景與實戰 開篇引入 Python 從簡潔優雅的腳本語言,成長為連接數據科學、機器學習與工程化部署的“膠水語言”。在這段進化中,深度學習框架把“數學表達式”變成可執行的“計算圖”,讓自動求導與高性能并行成為日常…

CentOS 7能聯網但yum報錯:Could not resolve host: mirrorlist.centos.org 終極解決方法

CentOS 7能聯網但yum報錯&#xff1a;Could not resolve host: mirrorlist.centos.org 終極解決方法關鍵詞&#xff1a;CentOS 7, yum, Could not resolve host, mirrorlist.centos.org, 軟件源, EOL問題描述大家好&#xff01;相信很多還在使用 CentOS 7 的朋友都遇到了這個問…

【解鎖Photonics for AI:系統學習光學神經網絡與超表面設計,成就下一代光芯片工程師】

### 光學神經網絡基礎 光學神經網絡利用光子替代電子進行信息處理&#xff0c;具有低延遲、高帶寬和低功耗優勢。核心組件包括衍射光學元件&#xff08;DOE&#xff09;、馬赫-曾德爾干涉儀&#xff08;MZI&#xff09;和微環諧振器。 衍射神經網絡&#xff08;DNN&#xff09…

基于SrpingBoot和Vue的共享筆記管理系統-項目分享

基于SrpingBoot和Vue的共享筆記管理系統-項目分享項目介紹項目摘要用戶管理實體圖筆記分享管理實體圖系統總體功能圖寫在最后項目介紹 使用者&#xff1a;管理員、用戶 開發技術&#xff1a;MySQLJavaSpringBootVue 項目摘要 隨著網絡技術的普及和人們閱讀習慣的改變&#x…

我的6年!

修改前&#xff1a;https://t.zsxq.com/ERUuD Data&#xff1a;2025/08/27 更新 你好&#xff0c;我是老成。我在星球中用紅包&#x1f9e7;的方式鼓勵大家發自我介紹&#xff0c;但是我又想&#xff0c;為帶動大家&#xff0c;我得做個榜樣&#xff0c;為此我重新修改一下我的…

深入理解事務一致性和隔離性

事務是數據庫系統提供的高級抽象&#xff0c;利用事務可以讓應用層付出較少的努力就能提供較高的一致性保障&#xff0c;而不用過度關心類似于競爭條件、不完全寫入、數據丟失等問題。 稍微學過用過數據庫的同學&#xff0c;大都接觸過事務這個概念&#xff0c;通常也知道事務…

最優化方法學習筆記

什么是“最優化”&#xff1f;最優化方法的核心思想是&#xff1a;在給定的條件下&#xff0c;找到一個最佳的解決方案。這個“最佳”通常是指使得某個目標函數&#xff08;可以是最小化或最大化的數值&#xff09;達到極致的答案。簡單來說&#xff0c;就是如何用最好的方式做…

多模態融合新紀元:Ovis2.5 本地部署教程,實現文本、圖像與代碼的深度協同推理

一、簡介Ovis2.5 旨在實現原生分辨率的視覺感知和增強的多模態推理。它集成了一個原生分辨率的視覺變換器&#xff08;NaViT&#xff09;&#xff0c;可以處理原始、可變分辨率的圖像&#xff0c;消除了固定分辨率切片的需要&#xff0c;并保留了精細細節和全局布局——這對于圖…

力扣hot100:滑動窗口最大值優化策略及思路講解(239)

記錄一下今天完成的算法題&#xff0c;雖然這個難度是困難&#xff0c;但感覺沒有那個560.和為k的子數組和難想&#xff0c;這個題主要就前期遇到個優先隊列&#xff0c;因為之前沒用過&#xff0c;不太熟悉&#xff0c;剩下的思路感覺都屬于正常難度問題描述原始思路&#xff…