成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:TypeScript中普通枚舉的反向映射是什么,它與常理枚舉的區別

開發 前端
在 TypeScript 中,普通枚舉(非 const enum)的一個特點是它會生成反向映射。這意味著你不僅可以通過枚舉的名字獲取對應的數值,還可以通過數值反查到枚舉的名字。

在 TypeScript 中,普通枚舉(非 const enum)的一個特點是它會生成反向映射。這意味著你不僅可以通過枚舉的名字獲取對應的數值,還可以通過數值反查到枚舉的名字。

舉個例子

假設我們有一個枚舉:

enum Color {
  Red,    // 0
  Green,  // 1
  Blue    // 2
}

在編譯后的 JavaScript 中,TypeScript 會生成類似下面的代碼:

var Color;
(function (Color) {
    Color[Color["Red"] = 0] = "Red";
    Color[Color["Green"] = 1] = "Green";
    Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));

這里發生了兩件事:

  1. 正向映射:通過枚舉名稱獲取數值。例如,Color.Red 返回 0
  2. 反向映射:通過數值獲取枚舉名稱。例如,Color[0] 返回 "Red"

反向映射的作用

反向映射的優勢在于你可以輕松地將數值轉換回它們對應的枚舉名稱,這在調試、日志記錄或者在某些業務場景中需要顯示友好的名稱時非常有用。

例如:

console.log(Color.Red);   // 輸出 0
console.log(Color[0]);    // 輸出 "Red"

總結

  • 正向映射Color.Red → 0
  • 反向映射Color[0] → "Red"

這種雙向映射機制只適用于數字枚舉。如果是字符串枚舉,TypeScript 不會生成反向映射,因為反向映射對于字符串來說沒有意義。

與常量枚舉(const enum)區別

在 TypeScript 中,普通枚舉和常量枚舉(const enum)有以下主要區別:

1. 編譯后的輸出

  • 普通枚舉
    編譯后會生成一個實際的對象,包含正向和反向映射。
    例如:
var Color;
(function (Color) {
    Color[Color["Red"] = 0] = "Red";
    Color[Color["Green"] = 1] = "Green";
    Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));

這意味著你可以通過 Color.Red 得到 0,也可以通過 Color[0] 得到 "Red"

  • 常量枚舉(const enum)
    編譯后不會生成實際的枚舉對象。
    所有對常量枚舉成員的引用都直接被內聯替換成對應的值。例如:
const enum Color {
  Red,
  Green,
  Blue
}
let c = Color.Green;

編譯后代碼會直接變成:

let c = 1;

沒有額外的對象和反向映射生成。

2. 反向映射

  • 普通枚舉
    自動生成反向映射,使得可以通過值查找名稱(僅適用于數字枚舉)。
  • 常量枚舉
    沒有反向映射,因為編譯器會直接將枚舉成員內聯,反向查找就沒有意義。

3. 用途與性能

  • 普通枚舉
    如果需要在運行時使用枚舉對象(例如調試或反向查找),普通枚舉是合適的選擇。但生成的代碼體積稍大,因為需要創建完整的對象。
  • 常量枚舉
    如果僅僅是為了在編譯時使用枚舉值,并且不需要運行時的對象或反向映射,可以使用常量枚舉。這樣可以減少編譯后的代碼體積和運行時開銷,因為枚舉成員會被內聯。

總結

  • 普通枚舉生成實際的對象,支持雙向映射,適合需要運行時反向查找的場景。
  • 常量枚舉在編譯后直接內聯枚舉值,沒有生成實際對象和反向映射,適合追求代碼體積優化且不需要運行時枚舉對象的場景。
責任編輯:武曉燕 來源: 大遷世界
相關推薦

2025-03-07 00:36:01

VuePiniaVuex

2021-08-04 08:33:59

TypeScriptConst Readonly

2025-03-07 08:44:47

Typescriptiinterfacetype

2025-06-03 08:50:00

Static全局變量C 語言

2024-04-19 08:23:06

2021-09-13 09:23:52

TypeScript命名空間

2021-09-07 08:33:27

JavaScript TypeScript 函數

2021-07-02 07:06:20

React組件方式

2025-03-05 00:01:00

ReduxReact

2025-05-28 10:15:00

C++Lambda泛型

2025-03-10 11:40:00

前端開發HTML

2025-03-10 00:00:00

property?attributeHTML

2021-05-12 08:20:53

開發

2023-06-09 09:10:06

nftablesiptables

2020-08-03 07:38:12

單例模式

2021-07-06 07:27:45

React元素屬性

2022-02-25 09:19:32

TypeScript輔助函數枚舉

2024-09-19 08:10:54

2021-03-01 12:40:02

JavaserialVersi代碼

2024-04-16 08:15:07

CHAR數據字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品在线免费观看 | 狠狠的操 | av影音资源 | 一级毛片观看 | 九色在线观看 | 欧美日韩视频网站 | 国产精品美女久久久 | 99精品一区 | 日韩欧美一区二区在线播放 | 91网视频 | av在线免费看网址 | 操网站 | 久久精品一级 | 国产一区二区精华 | 五月婷婷导航 | 91综合网 | 成人福利网站 | 欧美午夜视频 | 久久99精品久久久久久国产越南 | 亚洲精品视频免费观看 | 欧美一级片在线观看 | 欧美精品一区二区三区视频 | 一级a性色生活片久久毛片波多野 | 久草在线视频中文 | 俺去俺来也www色官网cms | 91新视频 | 成人精品一区二区 | 日韩在线成人 | 人人爽人人草 | 亚洲日韩中文字幕一区 | 国产电影一区二区 | 成人精品一区 | 丝袜 亚洲 欧美 日韩 综合 | 欧美一区二区在线观看 | 九久久| www.99热.com | 国产精品毛片无码 | 日韩国产中文字幕 | 99这里只有精品 | 国产精品区二区三区日本 | 午夜精品久久久 |