【TypeScript入门】TypeScript入门篇——枚举(enum)

        TypeScript是一种静态类型、可选的编程语言,它在JavaScript的基础上添加了类型检查、接口、枚举等新特性,可以让开发更加高效、代码更加健壮。在TypeScript中,枚举是一种特殊的数据类型,它可以用来定义一组命名的常量,让代码更具可读性和可维护性。        

        枚举( mei ju ) : 枚举的意思就是一一列举, 把所有情况都列举出来, 那么取值的时候, 只有这几个可以使用, 其他的都不行。

        计算机语言里面的枚举: 把所有的常量放在一个集合内, 让若干个常量变成一组有关联的内容。

目录

一、枚举的基本语法

二、自定义枚举值

三、访问枚举值

四、反向映射

五、const枚举

六、常数枚举表达式 

七、外部枚举


        TypeScript枚举(enum)是一种用于定义命名常量集合的数据类型。在TypeScript中,枚举提供了一个方便的方法来为一组有限的值命名,并将它们封装在一个命名空间中。

一、枚举的基本语法

        TypeScript枚举使用关键字“enum”来定义一个新的枚举类型。例如:

enum Direction {
  Up,
  Down,
  Left,
  Right
}

        这段代码定义了一个名为Direction的枚举类型,其中包含四个常量:UpDownLeftRight。默认情况下,这些常量的值从0开始自动递增。

案例实现:

enum Direction {
  Up,
  Down,
  Left,
  Right,
}

const move = (direction: Direction) => {
  switch (direction) {
    case Direction.Up:
      console.log('Moving up');
      break;
    case Direction.Down:
      console.log('Moving down');
      break;
    case Direction.Left:
      console.log('Moving left');
      break;
    case Direction.Right:
      console.log('Moving right');
      break;
    default:
      break;
  }
}

move(Direction.Up); // 打印 "Moving up"

        在这个例子中,我们定义了一个 Direction 枚举类型,包含了 Up、Down、Left 和 Right 四个元素。然后我们定义了一个 move 函数,接受一个 Direction 类型的参数,根据参数不同输出不同的消息。 当我们调用 move(Direction.Up) 时,会输出 Moving up,因为此时传递的参数是枚举类型 Direction 中的 Up 元素。如果传递的参数不是 Direction 类型中的任何一个元素,那么在 switch 语句的 default 分支中不会有任何输出。

二、自定义枚举值

        您可以通过自定义枚举值来覆盖默认的自动递增行为。例如:

enum Direction {
  Up = 1,
  Down,
  Left,
  Right
}

        在这个例子中,Direction.Up的值为1,而其余的常量的值分别为2、3和4。

三、访问枚举值

        要访问枚举值,只需使用点表示法即可。例如:

console.log(Direction.Up); // 输出1
console.log(Direction.Down); // 输出2

四、反向映射

        TypeScript枚举还提供了反向映射功能,允许您通过枚举值获取其对应的常量名称。例如:

console.log(Direction[1]); // 输出Up
console.log(Direction[2]); // 输出Down

五、const枚举

        TypeScript还支持const枚举,这种类型的枚举在编译时被删除并内联到引用它们的地方。这可以提高性能和减少生成的代码大小。例如:

const enum Direction {
  Up,
  Down,
  Left,
  Right
}

console.log(Direction.Up); // 直接输出0,没有额外的代码生成

六、常数枚举表达式 

        常数枚举表达式是指可以在编译时求值的表达式。这些表达式包括数字字面量、其他常数枚举表达式以及一些算术运算符。使用常数枚举表达式可以提高性能并减少生成的代码大小。例如:

enum E {
  A = 1 << 0,
  B = 1 << 1,
  C = A | B
}

        在这个例子中,常量E.C的值在编译时计算为3(即1 | 2)。

七、外部枚举

        外部枚举使用declare关键字定义,文档描述:外部枚举用来描述已经存在的枚举类型的形状,意思就是说外部枚举用来描述当前环境中存在的枚举对象。外部枚举和普通枚举的一个区别就是,在外部枚举里面没有初始化的枚举成员会当成一个计算值,而在普通枚举里面则是一个常量。

declare enum Enum {
    A = 1,
    B,
    C = 2
}

        外部枚举和非外部枚举之间有一个重要的区别,在正常的枚举里,没有初始化方法的成员被当成常数成员。 对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。


        总之,TypeScript中的枚举类型是一种包含有限数量的命名常量的数据类型,在编译后会被转换为相应的JavaScript代码。枚举类型可以帮助我们定义一组具有意义的常量,可以通过名称或值调用这些常量,提高代码的可读性和可维护性。在TypeScript中,枚举类型有两种定义方式:数字枚举和字符串枚举。数字枚举使用数字作为枚举值,字符串枚举使用字符串作为枚举值。枚举类型还支持反向映射、枚举成员类型、枚举合并等高级特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/3874.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络通信之应用层协议--Linux

文章目录关于应用层协议的理解应用层协议的制定理论部分代码部分完整代码以及测试HTTP协议代码测试HTTP协议HTTPS协议加密原因基础的加密方式数据摘要&#xff08;数据指纹&#xff09;数字签名HTTPS的加密方式的选择总结关于应用层协议的理解 在之前的一篇关于套接字实现网络…

天梯赛刷题小记 —— L2

最近在重刷 天梯赛&#xff0c;浅浅记录一下&#xff0c;进入L2阶段了 L2-001 紧急救援 解题思路&#xff1a;典型的dijkstra模板题&#xff0c;带路径记录与权重&#xff0c;方案数记录&#xff0c;解析出过 Dijkstra(兼路径) #include <bits/stdc.h> #define inf…

【数据分析之道-基础知识(三)】元组

文章目录专栏导读1、元组简介2、元组创建3、元组查找操作4、元组删除操作5、元组修改操作6、元组增加操作7、元组内置函数专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》&…

自动驾驶控制概况

文章目录1. 第一章行为决策在自动驾驶系统架构中的位置2. 路径跟踪控制的种类2.1 基于自行车模型的路径跟踪控制算法2.1.1 纯跟踪控制&#xff08;Pure Pursuit&#xff09;算法2.1.2 后轮反馈控制算法&#xff08;Rear wheel feedback&#xff09;2.1.3前轮反馈控制算法&#…

防火墙 NAT地址转换

网络地址转换&#xff08;NAT&#xff09;是一种用于访问Internet访问模式广域网&#xff08;WAN&#xff09;的技术&#xff0c;用于将私有&#xff08;保留&#xff09;地址转换为合法IP地址。NAT不仅能够有效地额抵抗外部网络攻击&#xff0c;还能够在IP地址分配不理想&…

Windows权限提升—令牌窃取、UAC提权、进程注入等提权

Windows权限提升—令牌窃取、UNC提权、进程注入等提权1. 前言2. at本地命令提权2.1. 适用范围2.2. 命令使用2.3. 操作步骤2.3.1. 模拟提权2.3.2. at配合msf提权2.3.2.1. 生成木马文件2.3.2.2. 设置监听2.3.2.3. 设置反弹2.3.2.4. 查看反弹效果3. sc本地命令提权3.1. 适用范围3.…

瑟瑟发抖吧——用了这款软件,我的开发效率提升了50%

一、前言 开发中&#xff0c;一直听到有人讨论是否需要重复造轮子&#xff0c;我觉得有能力的人&#xff0c;轮子得造。但是往往开发周期短&#xff0c;用轮子所节省的时间去更好的理解业务&#xff0c;应用到业务中&#xff0c;也能清晰发现轮子的利弊&#xff0c;一定意义上…

Warshall算法

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;> 算法 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我…

树莓派Linux源码配置,树莓派Linux内核编译,树莓派Linux内核更换

目录 一 树莓派Linux的源码配置 ① 内核源码下载说明 ② 三种方法配置源码 二 树莓派Linux内核编译 ① 内核编译 ② 编译时报错及解决方案&#xff08;亲测&#xff09; 三 更换树莓派Linux内核 操作步骤说明 ● dmesg报错及解决方案&#xff08;亲测&#xff0…

算法刷题笔记

特定方法 KMP算法&#xff1a;字符串匹配 逆波兰表达式&#xff1a;计算值 斐波那契数&#xff1a;动态规划 强制类型转换&#xff1a;整型->字符串&#xff1a;to_string&#xff0c;字符串->整型&#xff1a;stoi 一、数组 数组&#xff1a;下标从0开始&#xff0c;内存…

蓝桥杯嵌入式--LCD屏幕使用提升

前言之前在专栏里已经介绍过LCD相关库文件的移植&#xff0c;今天来介绍一下对于LCD屏幕的使用技巧。屏幕基本配置与函数一、屏幕初始化使用lcd前的必要步骤就是对LCD屏幕进行初始化操作&#xff0c;这也是一个容易忘记的操作。LCD_Init();\\使用lcd前的必要步骤就是对LCD屏幕进…

蓝桥杯倒计时 | 倒计时17天

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;蓝桥杯倒计时冲刺 描述&#x1f3a8;&#xff1a;蓝桥杯冲刺阶段&#xff0c;一定要沉住气&#xff0c;一步一个脚印&#xff0c;胜利就在前方&#xff01; 寄语&#x1f493;&#xff1a…

将一段数字转为字符串

将一段数字转为字符串 string turn(long long x){string str;while(x){int tx%10;// 数字0的ascii码为48&#xff01;char ct48;strc;// string类拼接方式x/10;}reverse(str.begin(),str.end()); // 不要忘了反转字符串return str; }例: #include<iostream> #include&l…

使用VS Code 配置Ubuntu远程C++开发环境

使用VS Code 配置Ubuntu远程C开发环境 环境准备 VS CodeWSL Ubuntu 虚拟机 配置步骤 在Ubuntu 中配置ssh远程登录 Ubuntu 配置远程登录 VsCode 安装 Remote-ssh 插件 打开vscode ssh configure ,填入相关信息 ​ Host : 主机名称&#xff0c;在左侧列表中显示的名称 ​ …

【Linux】[万字] Linux下的文件操作 及 Linux文件描述符fd 详解

在Linux操作系统中, 文件描述符是一个至关重要的概念. 理解了文件描述符, 其实就可以相当于理解了Linux系统的关于内存文件系统的整个大致框架和逻辑 但是在介绍文件描述符之前, Linux关于文件还存在许多 概念和文件操作 的知识需要介绍一下, 就当作是为解释文件描述符所做的…

IDEA连接Linux服务器进行文件操作

IDEA连接Linux服务器进行文件操作 文章目录IDEA连接Linux服务器进行文件操作连接的作用和意义安装openssh开启openssh服务验证是否开启服务安装网络工具包查看虚拟机IP地址Idea连接Linux虚拟机打开配置页面配置SFTP配置SSH完成后出现的配置文件安装big data tools插件连接的作用…

【RV1126】调试GT911,1024x600 7寸 MIPI 电容触摸屏

文章目录一、驱动注册失败二、触摸屏可以触摸&#xff0c;但是x轴数据反了三、可以触摸了&#xff0c;但是Y轴数据跳变&#xff0c;几乎只有一半的屏幕是可以正常滑动的三、汇顶触摸屏配置文件解析四、使用新的配置文件4.1 新配置解决问题4.2 测试触摸的方法在kernel增加frame …

【学习经验分享NO.21】学习资料分享(持续更新)

本博客将收集整理人工智能深度学习相关资料&#xff0c;进行整理&#xff0c;供大家学习使用。如果有需要帮忙整理的请留言。将不断更新&#xff0c;请持续关注。 一、深度学习论文资料 链接&#xff1a;https://pan.baidu.com/s/18LO5df0dp9-IE8Z3aFyrPg 提取码&#xff1a;c…

记录springboot+vue+fastdfs实现简易的文件(上传、下载、删除、预览)操作

前言说明&#xff1a;springboot vue FastDFS实现文件上传&#xff08;支持预览&#xff09;升级版 FASTDFS部分 FASTDFS安装过程&#xff1a;基于centos 7安装FastDFS文件服务器 SpringBoot部分 springboot源码实现 package com.core.doc.controller;import com.baomid…

【多线程】CAS

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; 目 录&#x1f40d;一. 什么是 CAS&#x1f98e;二. CAS 是怎么实现的&#x1f996;三. CAS 典型应用场景&#x1f436;1. 实现原子类&#x1f431;2. 实现自旋锁&#x1f995;四. …