亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

TypeScript枚舉Enum的具體使用

 更新時(shí)間:2025年06月04日 11:02:49   作者:Jayden_念舊  
本文主要介紹了TypeScript枚舉Enum的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

TypeScript 枚舉通過命名常量、類型安全和結(jié)構(gòu)化組織,顯著提升代碼質(zhì)量。使用時(shí)需根據(jù)場(chǎng)景選擇合適的類型(數(shù)字、字符串或常量枚舉),并權(quán)衡性能與動(dòng)態(tài)訪問需求。掌握其特性和使用的場(chǎng)景,能在復(fù)雜項(xiàng)目中有效提升代碼的可維護(hù)性和健壯性。接下來我會(huì)通過案例,深入解讀Enum。

一、枚舉的核心作用

替代魔法值 用有意義的名稱取代硬編碼數(shù)字或字符串,減少代碼歧義。

enum StatusCode { Success = 200, NotFound = 404 }
if (response.status === StatusCode.Success) { ... } // 比直接判斷200更清晰

類型安全 限制變量只能使用枚舉成員,編譯器會(huì)在賦值或比較時(shí)檢查類型。

enum Direction { Up, Down }
let dir: Direction = Direction.Up; // 正確
dir = 3; // 錯(cuò)誤:不能將數(shù)字直接賦值給枚舉類型

組織相關(guān)常量 將邏輯關(guān)聯(lián)的常量歸類,便于維護(hù)和擴(kuò)展。

enum LogLevel { Info, Warn, Error }

二、枚舉的類型與語法

1. 數(shù)字枚舉(默認(rèn))

成員默認(rèn)從 0 開始自增,也可手動(dòng)賦值。

支持反向映射:通過值獲取名稱(僅數(shù)字枚舉)。

enum Direction {
  Up = 1,     // 顯式賦值
  Down,       // 自動(dòng)遞增為2
  Left = 4,
  Right,      // 自動(dòng)遞增為5
}
console.log(Direction.Down);    // 輸出: 2
console.log(Direction[2]);      // 輸出: "Down"(反向映射)

2. 字符串枚舉

成員必須顯式初始化字符串值。

無反方向映射,適用于需明確語義的場(chǎng)景。

enum LogLevel {
  Info = "INFO",
  Warn = "WARN",
  Error = "ERROR"
}
console.log(LogLevel.Info); // 輸出: "INFO"

3. 常量枚舉(const enum)

編譯時(shí)被完全內(nèi)聯(lián),無運(yùn)行時(shí)對(duì)象。

提升性能,但無法反射或動(dòng)態(tài)訪問。

const enum Size { Small, Medium }
let size = Size.Small; // 編譯后:let size = 0;

4. 異構(gòu)枚舉(不推薦)

混合數(shù)字和字符串成員,易引發(fā)混亂。

enum BooleanLikeEnum {
  No = 0,
  Yes = "YES",
}

5. 同名枚舉合并 

多個(gè)同名的 Enum 結(jié)構(gòu)會(huì)自動(dòng)合并。

enum Foo {
  A,
}
enum Foo {
  B = 1,
}
enum Foo {
  C = 2,
}
// 等同于
enum Foo {
  A,
  B = 1,
  C = 2
}

三、枚舉的高級(jí)特性

1. 計(jì)算成員與常量成員

常量成員:值在編譯時(shí)確定(字面量、其他常量成員引用)。

計(jì)算成員:值在運(yùn)行時(shí)計(jì)算(需顯式初始化后續(xù)成員)。

enum FileAccess {
  None,                   // 常量成員 0
  Read = 1 << 1,          // 計(jì)算成員 2
  Write = 1 << 2,         // 計(jì)算成員 4
  ReadWrite = Read | Write, // 計(jì)算成員 6
  // 后續(xù)成員必須顯式初始化
  Execute = 8
}

2. 枚舉作為類型

限制變量或參數(shù)只能為枚舉成員值,這是枚舉的一個(gè)缺點(diǎn)。

enum UserRole { Admin, Guest }
function setRole(role: UserRole) { ... }
setRole(UserRole.Admin); // 正確
setRole(2); // 錯(cuò)誤:類型不符

四、枚舉的優(yōu)缺點(diǎn)對(duì)比

優(yōu)點(diǎn)缺點(diǎn)
提升代碼可讀性編譯后生成額外代碼(非 const enum)
編譯時(shí)類型檢查字符串枚舉不支持反向映射
支持反向映射(數(shù)字枚舉)異構(gòu)枚舉易導(dǎo)致邏輯混亂
便于統(tǒng)一管理常量動(dòng)態(tài)訪問可能繞過類型檢查(數(shù)字枚舉)

五、使用場(chǎng)景

  • 優(yōu)先使用字符串枚舉 提高代碼自描述性,避免數(shù)字枚舉的隱式歧義。

  • 性能敏感場(chǎng)景用 const enum 減少生成代碼量,但需確保無需動(dòng)態(tài)訪問枚舉。

  • 替代方案考量

    • 聯(lián)合類型:適用于簡(jiǎn)單且無需反向映射的場(chǎng)景。
      type LogLevel = 'INFO' | 'WARN' | 'ERROR';
    • 對(duì)象常量:需手動(dòng)凍結(jié)對(duì)象防止修改,無類型約束。
      const LogLevel = { Info: 'INFO' } as const;

 引用一個(gè)例子:Enum 結(jié)構(gòu)比較適合的場(chǎng)景是,成員的值不重要,名字更重要,從而增加代碼的可讀性和可維護(hù)性。

enum Operator {
  ADD,
  DIV,
  MUL,
  SUB
}
function compute(
  op:Operator,
  a:number,
  b:number
) {
  switch (op) {
    case Operator.ADD:
      return a + b;
    case Operator.DIV:
      return a / b;
    case Operator.MUL:
      return a * b;
    case Operator.SUB:
      return a - b;
    default:
      throw new Error('wrong operator');
  }
}
compute(Operator.ADD, 1, 3) // 4

 上面示例中,Enum 結(jié)構(gòu)Operator的四個(gè)成員表示四則運(yùn)算“加減乘除”。代碼根本不需要用到這四個(gè)成員的值,只用成員名就夠了。

六、示例對(duì)比

枚舉 vs 聯(lián)合類型

枚舉方案

enum Theme { Dark = 'dark', Light = 'light' }
function setTheme(theme: Theme) { ... }
setTheme(Theme.Dark);

聯(lián)合類型方案

type Theme = 'dark' | 'light';
function setTheme(theme: Theme) { ... }
setTheme('dark');

對(duì)比

  • 枚舉集中管理常量,修改時(shí)只需調(diào)整枚舉定義。
  • 聯(lián)合類型無需生成額外代碼,適合簡(jiǎn)單場(chǎng)景。

到此這篇關(guān)于TypeScript枚舉Enum的具體使用的文章就介紹到這了,更多相關(guān)TypeScript枚舉Enum內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 總結(jié)分享10個(gè)JavaScript代碼優(yōu)化小tips

    總結(jié)分享10個(gè)JavaScript代碼優(yōu)化小tips

    這篇文章主要介紹了總結(jié)分享10個(gè)JavaScript代碼優(yōu)化小tips,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • javascript下高性能字符串連接StringBuffer類

    javascript下高性能字符串連接StringBuffer類

    使用StringBuffer類比使用加號(hào)節(jié)省50%左右的時(shí)間,大家對(duì)于大數(shù)據(jù)的連接最好使用這個(gè)方法。
    2010-08-08
  • JavaScript判斷是否為數(shù)組的3種方法及效率比較

    JavaScript判斷是否為數(shù)組的3種方法及效率比較

    這篇文章主要介紹了JavaScript判斷是否為數(shù)組的3種方法及效率比較,本文直接給出運(yùn)行效果和實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • bootstrap組件之按鈕式下拉菜單小結(jié)

    bootstrap組件之按鈕式下拉菜單小結(jié)

    這篇文章主要介紹了bootstrap組件之按鈕式下拉菜單,包括單按鈕下拉菜單,分裂式下拉菜單和向上彈出式菜單,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2017-01-01
  • easyui form validate總是返回false的原因及解決方法

    easyui form validate總是返回false的原因及解決方法

    下面小編就為大家?guī)硪黄猠asyui form validate總是返回false的原因及解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • Bootstrap面板學(xué)習(xí)使用

    Bootstrap面板學(xué)習(xí)使用

    這篇文章主要為大家詳細(xì)介紹了Bootstrap面板的學(xué)習(xí)使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • select多選 multiple的使用示例

    select多選 multiple的使用示例

    使用multiple可以實(shí)現(xiàn)select多選,本例將為大家介紹下select多選 multiple的使用,新手朋友們可以學(xué)習(xí)下
    2014-06-06
  • javaScript基礎(chǔ)詳解

    javaScript基礎(chǔ)詳解

    本文主要介紹了javaScript的基礎(chǔ)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • JS實(shí)現(xiàn)可改變列寬的table實(shí)例

    JS實(shí)現(xiàn)可改變列寬的table實(shí)例

    本文為大家詳細(xì)介紹下通過JS實(shí)現(xiàn)可改變列寬的table,具體的思路及代碼如下,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助
    2013-07-07
  • javasript實(shí)現(xiàn)密碼的隱藏與顯示

    javasript實(shí)現(xiàn)密碼的隱藏與顯示

    用戶輸入密碼時(shí)都是顯示的星號(hào)了,那么我們希望查看明文要怎么查看呢,下面我們只要使用一段簡(jiǎn)單的js就可以實(shí)現(xiàn)查看密碼框的明文了,有需要的小伙伴可以來參考下。
    2015-05-05

最新評(píng)論