TypeScript Enum類型入門
一、什么是 Enum?
Enum 是 TypeScript 提供的自定義類型,用來定義一組有名字的常量集合。
簡(jiǎn)單說,就是給一堆固定的值起個(gè)好記的名字,替代代碼里的「魔法值」。
// 不用枚舉:直接寫值,別人看不懂 200 啥意思
const successCode = 200;
// 用枚舉:語義清晰,一看就懂
enum HttpStatus {
Success = 200,
Error = 500
}
枚舉的核心好處:
- 可讀性高:不用猜數(shù)字/字符串代表的含義
- 類型安全:寫錯(cuò)值會(huì)直接報(bào)錯(cuò)
- 易維護(hù):常量集中管理,改一處就行
二、Enum 的兩種常用類型
TypeScript 里最常用的是 數(shù)字枚舉 和 字符串枚舉,異構(gòu)枚舉(數(shù)字+字符串混合)基本不用,這里不展開。
1. 數(shù)字枚舉
枚舉成員的值是數(shù)字,支持自動(dòng)遞增和反向映射。
基礎(chǔ)用法
// 顯式賦值:每個(gè)成員指定數(shù)字
enum Weekday {
Monday = 1,
Tuesday = 2,
Wednesday = 3
}
// 使用:直接通過 枚舉名.成員名 取值
const today = Weekday.Monday;
console.log(today); // 輸出 1
自動(dòng)遞增(超方便)
如果不給成員賦值,TypeScript 會(huì)從 0 開始自動(dòng)加 1。
// 隱式遞增:Left=0, Right=1, Top=2, Bottom=3
enum Direction {
Left,
Right,
Top,
Bottom
}
console.log(Direction.Right); // 輸出 1
反向映射(數(shù)字枚舉專屬)
數(shù)字枚舉可以通過值查名字,這是字符串枚舉沒有的特性。
enum Weekday {
Monday = 1
}
// 正向:名字 → 值
console.log(Weekday.Monday); // 1
// 反向:值 → 名字
console.log(Weekday[1]); // "Monday"
2. 字符串枚舉
枚舉成員的值是字符串,必須手動(dòng)賦值,不支持自動(dòng)遞增和反向映射。
基礎(chǔ)用法
// 每個(gè)成員都要寫字符串值
enum UserRole {
Admin = "ADMIN",
Editor = "EDITOR",
Viewer = "VIEWER"
}
// 使用
const role = UserRole.Admin;
console.log(role); // 輸出 "ADMIN"
// 字符串枚舉沒有反向映射,下面代碼會(huì)報(bào)錯(cuò)
console.log(UserRole["ADMIN"]); // undefined
核心優(yōu)勢(shì):可讀性更強(qiáng)
調(diào)試時(shí)直接能看到字符串值,比數(shù)字更直觀。比如打印日志,ADMIN 比 1 好理解多了。
三、高級(jí)小技巧:常量枚舉(const enum)
在枚舉前加 const,就是常量枚舉。它的特點(diǎn)是:編譯后不會(huì)生成額外代碼,直接把值「嵌入」到使用的地方,體積更小、速度更快。
// 常量枚舉
const enum Color {
Red = "RED",
Green = "GREEN"
}
// 使用
const myColor = Color.Green;
編譯后對(duì)比(看懂就行)
- 普通枚舉:會(huì)生成一個(gè)對(duì)象,占內(nèi)存
- 常量枚舉:直接變成
const myColor = "GREEN",沒有多余代碼
注意:常量枚舉不支持反向映射,適合只需要取值的場(chǎng)景。
四、實(shí)戰(zhàn)場(chǎng)景:枚舉到底怎么用?
枚舉在項(xiàng)目里到處能用,舉兩個(gè)最常見的例子。
場(chǎng)景 1:管理接口狀態(tài)碼
后端返回的狀態(tài)碼,用枚舉統(tǒng)一管理,再也不用記數(shù)字了。
// 定義狀態(tài)碼枚舉
enum ApiStatus {
Success = 200,
NoAuth = 401,
ServerError = 500
}
// 接口請(qǐng)求后判斷狀態(tài)
function handleResult(code: ApiStatus) {
switch(code) {
case ApiStatus.Success:
console.log("請(qǐng)求成功");
break;
case ApiStatus.NoAuth:
console.log("請(qǐng)先登錄");
break;
case ApiStatus.ServerError:
console.log("服務(wù)器出錯(cuò)了");
break;
}
}
// 調(diào)用函數(shù)
handleResult(ApiStatus.NoAuth); // 輸出 "請(qǐng)先登錄"
場(chǎng)景 2:做下拉框選項(xiàng)(前端常用)
Vue/React 里的下拉框選項(xiàng),用枚舉定義,避免硬編碼。
// 性別枚舉
enum Gender {
Male = "MALE",
Female = "FEMALE"
}
// 轉(zhuǎn)成前端框架需要的選項(xiàng)格式
const genderOptions = [
{ label: "男", value: Gender.Male },
{ label: "女", value: Gender.Female }
];
// Vue 里用
// <el-select v-model="gender">
// <el-option v-for="item in genderOptions" :key="item.value" :label="item.label" :value="item.value" />
// </el-select>
到此這篇關(guān)于TypeScript Enum類型入門 的文章就介紹到這了,更多相關(guān)TypeScript Enum類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3基于countUp.js實(shí)現(xiàn)數(shù)字滾動(dòng)的插件
本文主要介紹了Vue3基于countUp.js實(shí)現(xiàn)數(shù)字滾動(dòng)的插件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
JavaScript簡(jiǎn)單實(shí)現(xiàn)鼠標(biāo)移動(dòng)切換圖片的方法
這篇文章主要介紹了JavaScript簡(jiǎn)單實(shí)現(xiàn)鼠標(biāo)移動(dòng)切換圖片的方法,涉及JavaScript針對(duì)鼠標(biāo)事件的響應(yīng)及頁面元素的動(dòng)態(tài)變換技巧,需要的朋友可以參考下2016-02-02
在iFrame子頁面里實(shí)現(xiàn)模態(tài)框的方法
今天小編就為大家分享一篇在iFrame子頁面里實(shí)現(xiàn)模態(tài)框的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
JavaScript中的call和apply的用途以及區(qū)別
本文主要介紹了JavaScript中的call和apply的用途以及區(qū)別。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
獲取當(dāng)前按鈕或者h(yuǎn)tml的ID名稱實(shí)例(推薦)
下面小編就為大家?guī)硪黄@取當(dāng)前按鈕或者h(yuǎn)tml的ID名稱實(shí)例(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
JavaScript獲取Excel表格的列序號(hào)和列名
這篇文章主要介紹了JavaScript獲取Excel表格的列序號(hào)和列名,在處理Excel文件時(shí),通常要獲取xx列的數(shù)據(jù),這就要求先找到列序號(hào),下文關(guān)于列名獲取需要的小伙伴可以參考一下2022-05-05
利用進(jìn)制轉(zhuǎn)換壓縮數(shù)字函數(shù)分享
本文主要介紹了進(jìn)制轉(zhuǎn)換函數(shù),用于壓縮數(shù)字,比如Date.now()這樣的長(zhǎng)數(shù)字,用62進(jìn)制表示,就更短,大家參考使用吧2014-01-01
JS前端實(shí)現(xiàn)倒計(jì)時(shí)存在誤差的原因及解決方案
這篇文章主要介紹了JavaScript前端倒計(jì)時(shí)不準(zhǔn)的原因,包括單線程陷阱、節(jié)能模式和設(shè)備時(shí)間干擾,提出了六大精準(zhǔn)計(jì)時(shí)方案,最后,總結(jié)了構(gòu)建高精度倒計(jì)時(shí)的最佳實(shí)踐,包括復(fù)合型校準(zhǔn)策略、誤差監(jiān)控與告警和用戶體驗(yàn)優(yōu)化,需要的朋友可以參考下2025-05-05

