成人免费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-05-28 10:15:00

C++Lambda泛型

2025-03-05 00:01:00

ReduxReact

2025-03-10 11:40:00

前端開發HTML

2025-03-10 00:00:00

property?attributeHTML

2021-05-12 08:20:53

開發

2020-08-03 07:38:12

單例模式

2023-06-09 09:10:06

nftablesiptables

2021-07-06 07:27:45

React元素屬性

2024-09-19 08:10:54

2022-02-25 09:19:32

TypeScript輔助函數枚舉

2024-04-16 08:15:07

CHAR數據字符串

2021-03-01 12:40:02

JavaserialVersi代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 青青草这里只有精品 | 国产精品不卡视频 | 国产在线精品一区二区三区 | 91精品国产91久久久久久 | 国产成人在线视频播放 | 亚洲欧美中文字幕 | 视频一区二区在线观看 | 国产欧美一区二区三区日本久久久 | 99精品视频在线 | 久久这里只有精品首页 | 日韩精品二区 | 日韩免费高清视频 | 久久久久免费观看 | 国产一区二区三区久久久久久久久 | www免费视频| 在线国产视频 | 在线中文字幕日韩 | 99视频在线免费观看 | 一a一片一级一片啪啪 | 免费黄色a级毛片 | 激情黄色在线观看 | 亚洲视频在线免费观看 | 亚洲欧美视频一区二区 | 米奇狠狠鲁 | 亚洲一区二区三区四区五区中文 | 成人免费视屏 | 久久久久国产 | 亚洲国产成人久久综合一区,久久久国产99 | 欧美日韩第一页 | 羞羞视频免费观 | 色吊丝2288sds中文字幕 | 亚洲人成人一区二区在线观看 | 羞羞色影院 | 99久久精品免费看国产高清 | 亚洲一一在线 | 亚洲人a | 精品一区二区三区四区视频 | 99爱免费 | 久久高清精品 | 香蕉视频91 | 亚洲欧美在线一区 |