TypeScript07:枚舉enum

一、擴展類型

擴展類型:類型別名、枚舉、接口、類。

枚舉:通常用于約束某個變量的取值范圍。?

字面量和聯合類型配合使用,也可以達到同樣的目標。

二、字面量類型的問題?

  1. 在類型約束位置,會產生重復代碼。可以使用類型別名解決該問題;
  2. 邏輯含義和真實的值產生了混淆,會導致當修改真實值的時候,產生大量的修改;
  3. 字面量類型,不會進入編譯結果。

三、枚舉

?1.如何定義一個枚舉

enum 枚舉名{

? ? ? ? 枚舉字段1 = 值1,

? ? ? ? 枚舉字段2 = 值2,

? ? ? ? ...

}

enum Sex { male = "男",female = "女"
}let sex: Sex
sex = Sex.maleconsole.log(sex); // 男

上面代碼中,將枚舉中的 male 改為 "帥哥" ,則輸出 "帥哥"

枚舉會出現在編譯結果中,編譯結果中表現為?對象?

var Sex;
(function (Sex) {Sex["Male"] = "\u7537";Sex["Female"] = "\u5973";
})(Sex || (Sex = {}));
let sex;
sex = Sex.Male;
console.log(sex);

?2.枚舉的規則

  • 枚舉的 字段值 可以使用?字符串?或者?數字
  • 數字枚舉的值會 自增 ,當第一個字段沒有賦值時,默認為 0
  • 被數字枚舉約束的變量,可以直接賦值為數字,可能會導致問題,不推薦;
  • 數字枚舉的編譯結果 字符串的編譯結果有差異;
enum Level { level1 = 2,level2,level3,
}let l: Level = Level.level2console.log(l); // 3
enum Level { level1,level2,level3,
}let l: Level = Level.level1console.log(l); // 0

數字枚舉的編譯結果:

var Level;
(function (Level) {Level[(Level["level1"] = 0)] = "level1";Level[(Level["level2"] = 1)] = "level2";Level[(Level["level3"] = 2)] = "level3";
})(Level || (Level = {}));
/*
{level1: 0,level2: 1,level3: 2,0:"level1",1:"level2",2:"level3"
}
*/
let l = Level.level1;
console.log(l);

因此循環遍歷數字枚舉時需要考慮到這點。

3.最佳實踐?

  1. 盡量不要在一個枚舉中即出現字符串字段,又出現數字字段;
  2. 使用枚舉時,盡量使用枚舉字段的名稱,而不使用真實的值;

四、位枚舉(枚舉的位運算)

位枚舉針對數字枚舉。

位運算:兩個數字換算成二進制的運算。

// 位枚舉
enum Permission { Read = 1, // 2^0 0001Write = 2, // 2^1 0010Create = 4, // 2^2 0100Delete = 8 // 2^3 1000
}// 1.如何組合權限:使用或運算
let p: Permission = Permission.Read | Permission.Write// 2.如何判斷是否有權限:使用與運算
// let hasRead: boolean = (p & Permission.Read) === Permission.Read
function hasPermission(target: Permission, per: Permission) { return (target & per) === per
}
// 判斷變量p是否擁有可讀權限
console.log(hasPermission(p, Permission.Read)); // true// 3.如何刪除某個權限:使用異或運算
p = p ^ Permission.Write
console.log(hasPermission(p, Permission.Write)); // false

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

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

相關文章

PSMC:繪圖腳本 psmc_plot.pl 腳本參數詳解

=> psmc_plot.plUsage: psmc_plot.pl [options] <out.prefix> <in.psmc>Options: -u FLOAT absolute mutation rate per nucleotide [2.5e-08]-s INT skip used in data preparation [100]-X FLOAT maximum generations,

機器學習圖像識別如何處理標簽以外的圖像?

機器學習圖像識別技術是一種基于人工智能的圖像處理方法&#xff0c;它通過訓練大量的圖像數據集來讓計算機學習如何識別和分類圖像。在圖像識別任務中&#xff0c;我們通常需要對圖像進行標注和分類&#xff0c;以便讓計算機能夠從中學習。但是&#xff0c;有時候我們可能會遇…

大數據旅游數據分析:基于Python旅游數據采集可視化分析推薦系統

文章目錄 基于Python旅游數據采集可視化分析推薦系統一、項目概述二、項目說明三、開發環境四、功能實現五、系統頁面實現用戶登錄注冊系統首頁數據操作管理價格與銷量分析旅游城市和景點等級分析旅游數據評分情況分析旅游數據評論情況分析旅游景點推薦Django系統后臺管理 六、…

centos7 安裝python3.8運行導入ssl報錯,親測驗證有效版

centos安裝python3.7時遇到如下問題&#xff0c;查閱知需要的openssl版本最低為1.0.2&#xff0c;但是centos 默認的為1.0.1&#xff0c;所以需要重新更新openssl import _ssl # if we cant import it, let the error propagate ImportError: No module named _ssl1、安…

【前端早早聊直播回顧】Harmony 時代的跨端方案

上周末&#xff0c;凡泰極客CTO - 徐鵬受邀出席「前端早早聊」直播活動&#xff0c;并以【跨端新挑戰-鴻蒙時代的跨端】為主題進行演講。 摘取部分分享實錄&#xff1a; 終端系統的數量和種類不斷增長&#xff0c;開發者面臨著多平臺開發的挑戰。以往開發者一般只需要維護iOS、…

2024年3月阿里云服務器大規模價格下調后優惠折扣表

阿里云服務器ECS等核心產品價格全線下調&#xff0c;最高幅度達55%&#xff0c;2024年3月1日生效&#xff0c;針對ECS部分在售產品的官網折扣價、ECS計算型節省計劃進行調整&#xff0c;生效后&#xff0c;基于官網折扣價的新購和續費&#xff0c;將按照新的價格進行計費。阿里…

程序媛的mac修煉手冊-- Node.js入門篇

最近因為參與一個微信小程序的開發&#xff0c;開始摸索JavaScript。期間&#xff0c;需要基于Node.js安裝微信開發工具的依賴項&#xff0c;所以又順帶學習了Node.js的包管理工具npm&#xff08;Node Package Manager&#xff09;。不過&#xff0c;之前看到國外的全棧大佬??…

flutter學習(一) 安裝以及配置環境

首先需要下載flutter&#xff0c;然后解壓 然后配置環境變量&#xff0c;配置到bin目錄就行 配置完之后cmd運行flutter doctor 你就會發現&#xff0c;都是錯 此時腦海里響起&#xff0c;臥槽&#xff0c;怎么回事&#xff0c;咋辦 別著急&#xff0c;我教你。。。 問題 這…

RK3568 RK809電源管理 RTC功能使能 定時喚醒

概述 RK809 是一款高性能 PMIC,RK809 集成 5 個大電流 DCDC、9 個 LDO、2 個 開關SWITCH、 1個 RTC、1個 高性能CODEC、可調上電時序等功能。 系統中各路電源總體分為兩種:DCDC 和 LDO。兩種電源的總體特性如下(詳細資料請自行搜索): DCDC:輸入輸出壓差大時,效率高,但…

python學習筆記 - 標準庫常量

Python 中有一些內置的常量&#xff0c;它們是一些特殊的值&#xff0c;通常不會改變。以下是其中一些常見的內置常量及其詳細解釋以及使用示例&#xff1a; True&#xff1a; 表示布爾值真。給 True 賦值是非法的并會引發 SyntaxError。 x True print(x) # 輸出&#xff1a…

內網穿透 nas/樹莓派+ipv4服務器 (ipv6)

nas 1.有個服務器 2.有個nas https://github.com/snail007/goproxy/blob/master/README_ZH.md https://github.com/snail007/proxy_admin_free/blob/master/README_ZH.md 2個官網一個是程序&#xff0c;一個是網站 手冊 https://snail007.host900.com/goproxy/manual/zh/#/?i…

Unity3D Shader事項法線貼圖功能詳解

前言 Unity3D它提供了豐富的功能和工具&#xff0c;使開發人員能夠輕松創建出色的游戲和應用程序。其中Shader是Unity3D中非常重要的一部分&#xff0c;它可以幫助開發人員實現各種視覺效果&#xff0c;包括法線貼圖功能。 對惹&#xff0c;這里有一個游戲開發交流小組&#…

rocketmq+rocket-dashboard win10安裝部署+注冊為Windows服務

1.1 首先去官網下載zip包 選擇自己需要的版本 下載 | RocketMQ 1.2 、下載后&#xff0c;解壓到指定目錄 1.3、配置RocketMQ環境變量 注意&#xff0c;看對應的版本需要jdk版本 1.4、啟動mqnameserver 進入bin目錄下&#xff0c;雙擊啟動mqnamesrv.cmd 啟動后&#xff0c;…

灰度圖像轉化為黑白圖像、轉化圖像為一位位深度的圖像(僅保留黑色)

/// <summary> /// 灰度圖像處理 /// </summary> public class PicGray {/// <summary>/// 獲取pic圖像對應的黑白圖像/// </summary>/// <param name"pic"></param>/// <param name"NumGray">像素灰度值</p…

webpack5基礎--02_基本配置( 5 大核心概念)

基本配置 在開始使用 Webpack 之前&#xff0c;我們需要對 Webpack 的配置有一定的認識。 5 大核心概念 entry&#xff08;入口&#xff09; 指示 Webpack 從哪個文件開始打包 output&#xff08;輸出&#xff09; 指示 Webpack 打包完的文件輸出到哪里去&#xff0c;如何…

Vue項目構建時遇到的問題

Vue項目構建時遇到的問題與上線相關問題 項目構建遇到的問題構建指令關于JavaScript文件無法識別的問題關于element-plus組件庫中的模塊顯示找不到的問題關于路由懶加載時組件路徑報錯問題關于項目靜態資源基準路徑的設置關于路由模式的問題 關于nginx服務器的使用 項目構建遇到…

事物管理(黑馬學習筆記)

事物回顧 在數據庫階段我們已學習過事務了&#xff0c;我們講到&#xff1a; 事物是一組操作的集合&#xff0c;它是一個不可分割的工作單位。事務會把所有的操作作為一個整體&#xff0c;一起向數據庫提交或者是撤銷操作請求。所以這組操作要么同時成功&#xff0c;要么同時…

java實現根據 表索引 批量新增或更新數據信息

目的 通過數據庫名、表名實現動態添加活更新數據。添加或更新由唯一索引判斷。 實現 思路 查詢數據庫表的唯一索引-CSDN博客 根據數據庫表名動態查詢表字段-CSDN博客 達夢數據庫根據唯一索引批量新增或更新數據-CSDN博客 將數據轉換為sql語句需要的格式 完善代碼&#xff0c;實…

maven常用打包命令

1.背景 2.代碼 1 mvn常用命令 一般情況下對于一個maven項目&#xff0c;cd切換到當前項目路徑下&#xff0c;執行如下示例命令即可對項目進行打包。 mvn clean install mvn -U clean package -Dmaven.test.skiptrue mvn clean package -Dmaven.test.skiptrue -P prod mvn cle…

JavaScript數組操作指南:20個精通操作技巧指南

splice、 slice、 pop 和 shift。數組的排序方法是穩定且非原地算法的嗎&#xff1f;要記住所有 JavaScript 數組方法以及它們之間的區別并不容易。它們的名稱相似&#xff0c;就好像直接從同義詞詞典中提取一樣。 這個數組速查表列出了 JavaScript 中通常需要的所有數組方法&…