TypeScript:枚举类型

1. 什么是枚举类型?

  • 枚举(Enum)是TypeScript中一种特殊的数据类型,用于定义一组命名的常量值。它允许开发者用一个友好的名称来代表数值或字符串,避免使用“魔法数字”或硬编码值。

  • 基本语法:

enum Direction {Up = 1,   // 数字枚举,默认从0开始,但可显式赋值Down,     // 自动递增为2Left = "LEFT",  // 字符串枚举Right = "RIGHT"
}
  • 在前端开发中,枚举常用于管理状态(如路由状态、UI状态)、配置选项(如表单验证规则)或API响应码,确保代码更易于理解和调试。

2. 枚举的主要类型

  • 数字枚举(Numeric enums):默认情况下,成员值为从0开始的自增数字。
enum StatusCode {OK = 200,       // 显式赋值BadRequest = 400,Unauthorized   // 自动为401
}
// 使用:StatusCode.OK 返回 200

优点:简洁高效;编译器会生成优化后的JavaScript代码。

  • 字符串枚举(String enums):每个成员明确赋值为字符串。
enum UserRole {Admin = "ADMIN",User = "USER",Guest = "GUEST"
}
// 使用:UserRole.Admin 返回 "ADMIN"
优点:提高运行时可读性,便于日志输出或API交互。

  • 常量枚举(Const enums):使用const关键字定义,编译时会被内联替换,减少运行时开销。
const enum LogLevel {Error = 0,Warn,Info
}
// 编译后:LogLevel.Error 直接被替换为 0

优点:性能优化,适合高性能场景如React组件状态管理。

  • 异构枚举(Heterogeneous enums):混合数字和字符串值,但较少用,可能降低可读性。

enum Mixed {Yes = 1,No = "NO"
}

3. 枚举的用法和最佳实践

前端开发中的应用场景

  • 状态管理:在React或Vue中,用枚举定义组件状态或Redux action类型。

enum LoadingState {Idle,Loading,Success,Error
}
// 在React中使用:setState(LoadingState.Loading)
  • API处理:统一HTTP状态码或错误类型。

enum ApiError {NetworkError = 500,ValidationError = 400
}
// 在fetch请求中处理错误
  • 配置选项:如表单字段类型或主题设置。

enum Theme {Light = "light",Dark = "dark"
}
document.body.classList.add(Theme.Dark);
  • 优缺点分析

    • 优点

      • 可读性强:用名称代替数字/字符串,代码更语义化。

      • 类型安全:TS编译器检查枚举值的使用,减少运行时错误(如拼写错误)。

      • 重构友好:修改枚举值只需一处定义,自动波及所有引用。

      • 兼容性好:与JavaScript集成无缝,编译后生成标准对象。

    • 缺点

      • 运行时开销:非const枚举会生成额外JavaScript对象,可能影响性能(尤其在低端设备)。

      • 灵活性不足:枚举值是固定的,不如联合类型(type Status = 'idle' | 'loading')动态。

      • 潜在问题:字符串枚举在序列化时可能有歧义;数字枚举的自增可能导致意外值。

  • 前端最佳实践

    • 优先使用const枚举或字符串枚举以优化性能。

    • 在小型常量集时推荐枚举;大型或动态集时改用联合类型或对象字面量。

    • 避免在循环中频繁访问枚举,改用缓存变量。

4. 总结

        枚举类型是TypeScript的核心特性之一,尤其在前端开发中,它能显著提升代码质量。通过定义一组命名常量,枚举增强了可维护性、减少错误,并简化了状态管理和配置。然而,开发者需权衡其优缺点:在需要高性能或动态值时,替代方案如联合类型可能更优。总体而言,枚举是前端工程中的利器,推荐在管理固定常量(如状态码、角色权限)时积极采用,但需结合项目规模谨慎使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven 编译打包一个比较有趣的问题

前言最近做项目,发现一个比较有意思的问题,其实发现了问题的根源还是很好理解,但是如果突然看到会非常的难以理解。在Java项目中,明明包名错误了,居然可以正常编译打包,IDEA报错了,但是mvn命令正…

Leetcode贪心算法

题目&#xff1a;划分字母区间 题号&#xff1a;763class Solution {public List<Integer> partitionLabels(String s) {List<Integer> list new LinkedList();int[] edge new int[27];char[] chars s.toCharArray();for(int i 0; i <chars.length;i){edge…

【密码学基础】加密消息语法 CMS:给数字信息装个 “安全保险箱”

如果说数字世界是一座繁忙的城市&#xff0c;那么我们每天发送的邮件、合同、软件安装包就是穿梭在城市里的 “包裹”。有些包裹里装着隐私&#xff08;比如银行账单&#xff09;&#xff0c;有些装着重要承诺&#xff08;比如电子合同&#xff09;&#xff0c;还有些关系到设备…

leetcode算法刷题的第二十天

1.leetcode 39.组合总和 题目链接 这道题里面的数组里面的数字是可以重复使用的&#xff0c;那可能就会有人想&#xff0c;出现了0怎么办&#xff0c;有这个想法的很好&#xff0c;但是题目要求数组里面的数字最小值为1&#xff0c;这就可以让人放心了。但是有总和的限制&…

使用Spoon报错Driver class ‘com.microsoft.sqlserver.jdbc.SQLServerDriver‘ could not be found解决方法

使用Spoon报错Driver class ‘com.microsoft.sqlserver.jdbc.SQLServerDriver’ could not be found 产生原因 出现这个错误是因为Spoon无法找到用于连接MS SQL Server的JDBC驱动程序。该驱动程序是一个jar文件,通常需要手动下载并配置。 解决方案 下载JDBC驱动程序: 访问 M…

【实时Linux实战系列】基于实时Linux的音频实时监控系统

在当今数字化时代&#xff0c;音频监控系统在许多领域都有着广泛的应用&#xff0c;例如安全监控、工业环境监测、智能交通等。音频实时监控系统能够实时采集、分析音频信号&#xff0c;并在检测到异常时发出警报&#xff0c;这对于提高安全性、优化生产流程和提升用户体验都有…

改造thinkphp6的命令行工具和分批次导出大量数据

文章目录基本用法传入参数addArgumentaddOption参数提示导出数据示例准备工作执行导出基本用法 在thinkphp6框架中&#xff0c;自带了命令行工具&#xff0c;通过配置 config/console.php &#xff0c;添加自定义的命令&#xff1a; return [commands > [//...//新增的自定…

外汇中高频 CTA 风控策略回测案例

在汇率波动日益频繁、企业与机构对风险管理要求不断提高的背景下&#xff0c;外汇交易策略已成为资产配置与对冲操作的重要工具。其中&#xff0c;CTA 策略在外汇交易中具有非常重要的实际应用价值&#xff0c;在风险控制、趋势捕捉、资金效率与交易实用性之间取得了良好平衡。…

【iOS】内存管理及部分Runtime复习

1.继承链关于继承链存在两个指针 类的superclass指向父类 父类的sp指向根类 根类的sp指向空 元类的sp指向父类的元类 最终指向根元类 而根元类的sp指向根类 而关于isa指针 对象的isa指针指向它所属的类 类的isa指针指向元类 元类的isa指针指向根元类 根元类的isa指针指向自己2.…

重置 Windows Server 2019 管理员账户密码

文章目录前言1. 重置方法2. 重置流程总结前言 之前因为参加华为存储的 HCIE 培训和考试&#xff0c;以及在项目上交付和运维&#xff0c;占用了较多的时间和精力&#xff0c;导致很长一段时间没有去写博客&#xff0c;前些天登录 CSDN 博客发现原力已失效&#xff0c;才知道平…

.Net Core Web 架构(管道机制)的底层实现

.Net Core Web 架构(管道机制)的底层实现 .NET Core Web 程序的底层实现是一个复杂的体系&#xff0c;但我们可以将其分解为几个核心部分来理解。它本质上是一个将 HTTP 请求转换为开发者代码执行&#xff0c;并将执行结果返回为 HTTP 响应的精密管道。 下图清晰地展示了这一处…

计算图的力量:从 PyTorch 动态图到 TensorFlow 静态图的全景与实战

计算图的力量:从 PyTorch 动态图到 TensorFlow 静态图的全景与实战 开篇引入 Python 从简洁优雅的脚本语言,成长为连接数据科学、机器学习与工程化部署的“胶水语言”。在这段进化中,深度学习框架把“数学表达式”变成可执行的“计算图”,让自动求导与高性能并行成为日常…

CentOS 7能联网但yum报错:Could not resolve host: mirrorlist.centos.org 终极解决方法

CentOS 7能联网但yum报错&#xff1a;Could not resolve host: mirrorlist.centos.org 终极解决方法关键词&#xff1a;CentOS 7, yum, Could not resolve host, mirrorlist.centos.org, 软件源, EOL问题描述大家好&#xff01;相信很多还在使用 CentOS 7 的朋友都遇到了这个问…

【解锁Photonics for AI:系统学习光学神经网络与超表面设计,成就下一代光芯片工程师】

### 光学神经网络基础 光学神经网络利用光子替代电子进行信息处理&#xff0c;具有低延迟、高带宽和低功耗优势。核心组件包括衍射光学元件&#xff08;DOE&#xff09;、马赫-曾德尔干涉仪&#xff08;MZI&#xff09;和微环谐振器。 衍射神经网络&#xff08;DNN&#xff09…

基于SrpingBoot和Vue的共享笔记管理系统-项目分享

基于SrpingBoot和Vue的共享笔记管理系统-项目分享项目介绍项目摘要用户管理实体图笔记分享管理实体图系统总体功能图写在最后项目介绍 使用者&#xff1a;管理员、用户 开发技术&#xff1a;MySQLJavaSpringBootVue 项目摘要 随着网络技术的普及和人们阅读习惯的改变&#x…

我的6年!

修改前&#xff1a;https://t.zsxq.com/ERUuD Data&#xff1a;2025/08/27 更新 你好&#xff0c;我是老成。我在星球中用红包&#x1f9e7;的方式鼓励大家发自我介绍&#xff0c;但是我又想&#xff0c;为带动大家&#xff0c;我得做个榜样&#xff0c;为此我重新修改一下我的…

深入理解事务一致性和隔离性

事务是数据库系统提供的高级抽象&#xff0c;利用事务可以让应用层付出较少的努力就能提供较高的一致性保障&#xff0c;而不用过度关心类似于竞争条件、不完全写入、数据丢失等问题。 稍微学过用过数据库的同学&#xff0c;大都接触过事务这个概念&#xff0c;通常也知道事务…

最优化方法学习笔记

什么是“最优化”&#xff1f;最优化方法的核心思想是&#xff1a;在给定的条件下&#xff0c;找到一个最佳的解决方案。这个“最佳”通常是指使得某个目标函数&#xff08;可以是最小化或最大化的数值&#xff09;达到极致的答案。简单来说&#xff0c;就是如何用最好的方式做…

多模态融合新纪元:Ovis2.5 本地部署教程,实现文本、图像与代码的深度协同推理

一、简介Ovis2.5 旨在实现原生分辨率的视觉感知和增强的多模态推理。它集成了一个原生分辨率的视觉变换器&#xff08;NaViT&#xff09;&#xff0c;可以处理原始、可变分辨率的图像&#xff0c;消除了固定分辨率切片的需要&#xff0c;并保留了精细细节和全局布局——这对于图…

力扣hot100:滑动窗口最大值优化策略及思路讲解(239)

记录一下今天完成的算法题&#xff0c;虽然这个难度是困难&#xff0c;但感觉没有那个560.和为k的子数组和难想&#xff0c;这个题主要就前期遇到个优先队列&#xff0c;因为之前没用过&#xff0c;不太熟悉&#xff0c;剩下的思路感觉都属于正常难度问题描述原始思路&#xff…