TypeScript枚舉

1、數字枚舉

enum Direction {Up,Down,Left,Right,
}
var Direction;
(function (Direction) {Direction[Direction["Up"] = 0] = "Up";Direction[Direction["Down"] = 1] = "Down";Direction[Direction["Left"] = 2] = "Left";Direction[Direction["Right"] = 3] = "Right";
})(Direction || (Direction = {}));

可以反向映射

enum AnimalFlags {None = 0,HasClaws = 1  << 0,CanFly = 1 << 1
}interface Animal {flags: AnimalFlags;[key: string]: any
}function printAnimalAbilities(animal: Animal) {var animalFlags = animal.flags;if(animalFlags & AnimalFlags.HasClaws) {console.log('animal has claws')}if(animalFlags & AnimalFlags.CanFly) {console.log('animal has fly')}if(animalFlags == AnimalFlags.None) {console.log('nothing')}
}var animal = { flags: AnimalFlags.None };
printAnimalAblities(animal); // 什么都沒有
animal.flags |= AnimalFlags.HasClaws;
printAnimalAblities(animal); // 動物有爪子
animal.flags &= ~AnimalFlags.HasClaws;
printAnimalAblities(animal); // 什么都沒有
animal.flags |= AnimalFlags.HasClaws | AnimalFlags.CanFly;
printAnimalAblities(animal); // 動物有爪子,能飛翔

在這里,我們可以進行如下操作。

  • 使用 |= 來添加一個標記。
  • 組合使用&= 和 ~ 來清理一個標記。
  • 使用 | 來合并標記。

1.1 數字枚舉和數字類型

TypeScript的枚舉是基于數字的,這意味著可以將數字類型賦值給枚舉類型的實例

enum Color {Red,Green,Blue
}
let col = Color.Red;
col = 0; // 與Color.Red一樣有效

2、字符串枚舉

enum Direction {Up = "上",Down = "下",Left = "左",Right = "右"
}
var Direction;
(function (Direction) {Direction["Up"] = "\u4E0A";Direction["Down"] = "\u4E0B";Direction["Left"] = "\u5DE6";Direction["Right"] = "\u53F3";
})(Direction || (Direction = {}));

3、異構枚舉

enum Direction {Up,Down = "下",Left = "左",Right = "右"
}
var Direction;
(function (Direction) {Direction[Direction["Up"] = 0] = "Up";Direction["Down"] = "\u4E0B";Direction["Left"] = "\u5DE6";Direction["Right"] = "\u53F3";
})(Direction || (Direction = {}));

4、枚舉成員

enum Char {//const a,b = 1 + 3,c = Char.a,//computedd = Math.random(),e = "123".length
}
var Char;
(function (Char) {//const Char[Char["a"] = 0] = "a";Char[Char["b"] = 4] = "b";Char[Char["c"] = 0] = "c";//computedChar[Char["d"] = Math.random()] = "d";Char[Char["e"] = "123".length] = "e";
})(Char || (Char = {}));

5、常量枚舉

在編譯階段被移除(提高性能)

const enum Month {Jan,Feb,Mar
}

編譯:

const enum Month {Jan,Feb,Mar
}
let month = [Month.Jan,Month.Feb,Month.Mar]

編譯:

var month = [0 /* Jan */, 1 /* Feb */, 2 /* Mar */];
const enum Title {False,True,Unkonown
}
const title: Title = Title.False

通過設置--preserveConstEnums,運行時可以使用保留編譯后的變量

var Title;
(function (Title) {Title[Title["False"] = 0] = "False";Title[Title["True"] = 1] = "True";Title[Title["Unknown"] = 2] = "Unknown";
})(Title || (Title = {}));
var title = 0 /* False */;

6、有靜態方法的枚舉

使用enum + namespace的聲明方式向枚舉類型添加靜態方法。我們將靜態成員isBusinessDay添加到枚舉上。

enum Weekday {Monday,Tuesday,Wednesday,Tuseday,Friday,Saturday,Sunday
}namespace Weekday {export function isBusinessDay(day:Weekday) {switch(day) {case Weekday.Saturday:case Weekday.Sunday:return false;default true;}}
}
const mon = Weekday.Monday;
const sun = Weekday.Sunday;console.log(Weekday.isBusinessDay(mon)) //true
console.log(Weekday.isBusinessDay(sun)) //false

7、示例

7.1、創建數組

interface MapItem<TEnum, CnEnum> {key: string,value: string,label: string
}
/*** @description: 將 enum 與中文 enum 轉換為數組,適合直接輸出在 v-for 里* @param {TEnum} map* @param {CnEnum} mapCn* @return {MapItem[]} 返回適合于循環的數組*    key:enum 大寫的 key*    value:傳給后端的值*    label:中文值*/
export function convertMap<TEnum, CnEnum>(map: TEnum, mapCn: CnEnum):MapItem<TEnum, CnEnum>[] {return Object.keys(mapCn).map(key => {return {key,value: map[key],label: mapCn[key]}})
}interface ValueLabel {[key: string]: string
/*** @description: 返回后端的值對應中文的對象* @param {TEnum} map* @param {CnEnum} mapCn* @return {ValueLabel} 后端的值對應中文,例如{ Y: 是, N: 否 }*/
}
export function convertValueLabel<TEnum, CnEnum>(map: TEnum, mapCn: CnEnum): ValueLabel {const valueLabel:ValueLabel = {}Object.keys(mapCn).forEach(key => {valueLabel[map[key]] = mapCn[key]})return valueLabel
}/*** @description: 同上,只不過是中文對應英文* @param {TEnum} map* @param {CnEnum} mapCn* @return {ValueLabel} 中文對應后端的值,例如{ 是: Y, 否: N }*/
export function convertLabelValue<TEnum, CnEnum>(map: TEnum, mapCn: CnEnum): ValueLabel {const valueLabel:ValueLabel = {}Object.keys(mapCn).forEach(key => {valueLabel[mapCn[key]] = map[key]})return valueLabel
}

7.2、Map

enum E {a,b}
enum F {a = 0, b=1 }
enum G {a='apple',b ='banana'}let e: E = 3
let f: F = 3
e === f // errorlet e1: E.a = 1
let e2: E.b = 1
let e3: E.a = 1
e1 === e3 // true
e1 === e2 // false

7.3、Map

export enum sizeEnum {XS = 'XS',SM = 'SM',MD = 'MD',LG = 'LG',XL = 'XL',XXL = 'XXL',
}export enum screenEnum {XS = 480,SM = 576,MD = 768,LG = 992,XL = 1200,XXL = 1600,
}const screenMap = new Map<sizeEnum, screenEnum>()screenMap.set(sizeEnum.XS, screenEnum.XS)
screenMap.set(sizeEnum.SM, screenEnum.SM)
screenMap.set(sizeEnum.MD, screenEnum.MD)
screenMap.set(sizeEnum.LG, screenEnum.LG)
screenMap.set(sizeEnum.XL, screenEnum.XL)
screenMap.set(sizeEnum.XXL, screenEnum.XXL)export { screenMap }

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

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

相關文章

[點云分割] 基于顏色的區域增長分割

效果&#xff1a; 代碼&#xff1a; #include <iostream> #include <thread> #include <vector>#include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/search/search.h> #include <pcl/search/kdtree.h> #inclu…

AR道具特效制作工具

AR&#xff08;增強現實&#xff09;技術已經逐漸滲透到各個行業&#xff0c;為企業帶來了全新的營銷方式和用戶體驗。在這個背景下&#xff0c;美攝科技憑借其強大的技術實力和創新精神&#xff0c;推出了一款專為企業打造的美攝AR特效制作工具&#xff0c;旨在幫助企業輕松實…

MIKE水動力筆記19_統計平均潮差

本文目錄 前言Step 1 ArcGIS中創建漁網點Step 2 將dfsu數據提取到漁網點Step 3 Python統計平均潮差 前言 日平均潮差&#xff08;average daily tidal range&#xff09;&#xff1a;日高潮潮高合計之和除以實有高潮個數為日平均高潮潮高&#xff0c;日低潮潮高合計之和除以實…

Quartz .Net 的簡單使用

參考了&#xff1a;c# .net framework 4.5.2 , Quartz.NET 3.0.7 - runliuv - 博客園 (cnblogs.com) https://www.cnblogs.com/personblog/p/11277527.html&#xff0c; Quartz.NET 作業調度&#xff08;一&#xff09;&#xff1a;Test - 簡書 自己要輪詢的任務&#xff1a…

NX二次開發UF_CAM_PREPRO_init_module 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_PREPRO_init_module Defined in: uf_cam_prepro.h int UF_CAM_PREPRO_init_module(void ) overview 概述 Initializes the required environment for this module. 初始化此…

淺談Python裝飾器原理與用法分析

前言 本文實例講述了Python裝飾器原理與用法。分享給大家供大家參考&#xff0c;具體如下&#xff1a; 1、裝飾器的本質是函數&#xff0c;主要用來裝飾其他函數&#xff0c;也就是為其他函數添加附加功能 2、裝飾器的原則: (1) 裝飾器不能修改被裝飾的函數的源代碼 (2) 裝…

VScode調試沒有反應

點擊調試按鈕后沒反應 有可能是vscode中安裝的python插件版本問題 可以通過重新安裝比較舊一點的python嘗試解決此問題 步驟如下&#xff1a; 然后從中選擇比當前版本更低的版本即可 安裝完成后需重啟vscode

初識EasyAR

EasyAR 一、介紹&#xff08;核心還是 目標圖像的屏占比&#xff09; 支持 EasyAR-AR|AR技術|AR SDK|Unity AR|下載 1.表面、圖片(靜止/運動)跟蹤&#xff0c;支持多目標 2.3D物體(靜止/運動)跟蹤(注&#xff1a;物體旋轉、遠近移動也可以&#xff0c;本人試過&#xff0c;…

縱享雙創盛宴 “之江創客”再創電商新輝煌

消費日報網訊&#xff08;記者 牛夏風&#xff09;營造良好電商雙創生態&#xff0c;集聚電商發展新勢能。10月31日&#xff0c;以“開放、連接、協同、賦能”為主題的“之江創客”2023全球電子商務創業創新大賽總決賽暨頒獎典禮在湖州南潯圓滿落幕。 記者從現場獲悉&#xff…

SQL 中的 MIN 和 MAX 以及常見函數詳解及示例演示

SQL MIN() 和 MAX() 函數 SQL中的MIN()函數和MAX()函數用于查找所選列的最小值和最大值&#xff0c;分別。以下是它們的用法和示例&#xff1a; MIN() 函數 MIN()函數返回所選列的最小值。 示例&#xff1a; 查找Products表中的最低價格&#xff1a; SELECT MIN(Price) F…

js 獲取當前窗口顯示的放大比例

可以獲取當前窗口顯示的放大比例&#xff0c;也稱為設備像素比 (devicepixelratio) 。這通常用于處理高DPI (高分辨率)屏幕上的視圖縮放。您可以使用window.devicePixelRatio 屬性來獲得當前設備像素比。 以下是一個簡單的JavaScript示例&#xff0c;演示如何獲取設備像素比: j…

基于獼猴Spike運動解碼的不同解碼方法性能對比

公開數據集中文版詳細描述 參考前文&#xff1a;https://editor.csdn.net/md/?not_checkout1&spm1011.2124.3001.6192神經元Spike信號分析 參考前文&#xff1a;https://blog.csdn.net/qq_43811536/article/details/134359566?spm1001.2014.3001.5501神經元運動調制分析 …

2023 年戴森設計大獎得主是誰?給大樓降溫、爭取救援機會

2023 年戴森設計大獎得主是誰&#xff1f;給大樓降溫、爭取救援機會 ?編輯拉風的極客2023/11/22 摘要 當今社會除了持續不斷對科技創新保持注目&#xff0c;還有很多年輕發明家為了實際場景的難題提供解決方案。 11 月 15 日&#xff0c;2023 年戴森設計大獎國際大獎名單正…

Doris DDL和DML

1 創建用戶和數據庫 1)創建test用戶 mysql -h hadoop1 -P 9030 -uroot -p create user test identified by test; 2)創建數據庫 create database test_db; 3)用戶授權

2023年危險化學品生產單位安全生產管理人員證模擬考試題庫及危險化學品生產單位安全生產管理人員理論考試試題

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2023年危險化學品生產單位安全生產管理人員證模擬考試題庫及危險化學品生產單位安全生產管理人員理論考試試題是由安全生產模擬考試一點通提供&#xff0c;危險化學品生產單位安全生產管理人員證模擬考試題庫是根據危…

文件的原理和應用

常識: 1 文件包括屬性和內容 2 文件有打開和未打開文件&#xff0c; 3 本文先討論誰打開的文件&#xff0c;以及如何管理已經打開的文件 一 回憶c接口 1 fopen 我們在test.c里面用一下fopen函數&#xff0c;不存在打開的文件會默認創建&#xff0c;那為什么默認新建在當前…

【Kettle實戰】字符串處理及網絡請求JSON格式處理

經過大量的kettle操作實踐&#xff0c;我們會漸漸掌握一些技巧&#xff0c;大大減輕清洗的工作量。比如在哪里 處理字符串更方便&#xff0c;在哪兒處理更合理都是一個取舍問題。 字符串拼接 MySQL中使用concat(字段1,字段2)&#xff0c;但是如果“字段2”為NULL&#xff0c;結…

高速公路智能公專融合調度系統方案

在現代高速公路交通設施中&#xff0c;無線對講通信系統已經慢慢成為至關重要的環節。完善無線通信系統可以實現語音和數據的實時傳輸&#xff0c;確保調度中心和現場工作人員的及時溝通&#xff0c;快速響應和提供協調支持。隨著國內高速公路的發展&#xff0c;通信系統建設需…

11月22日,每日信息差

今天是2023年11月22日&#xff0c;以下是為您準備的15條信息差 第一、微軟將投資5億美元在魁北克擴大云計算和人工智能基礎設施 第二、奇安信預計與中國電子CEC業務量大幅增加 第三、極數云舟發布云舟數據編織系統“Ark Fabric” 第四、美國企業對特定電子眼鏡產品及其組件…

如何在windows使用別名遠程執行命令

需求背景 在開發中,需要在服務器執行腳本,需要如下幾步操作: 1.打開xshell 2.登錄服務器 3.進入命令腳本的路徑 4.執行腳本 但是,作為懶人來說,操作太繁瑣了,真麻煩,能不能一鍵就解決那么多操作?所以,開始研究windows有沒有這個東西,而且不需要額外的軟件就可以實現的.結…