首页 > 其他分享 >在typescript项目中什么场景适合定义枚举值,什么场景适合定义常量类?

在typescript项目中什么场景适合定义枚举值,什么场景适合定义常量类?

时间:2024-02-26 18:55:05浏览次数:25  
标签:场景 定义 适合 枚举 类型 常量

在typescript项目中什么场景适合定义枚举值,什么场景适合定义常量类

在 TypeScript 中,枚举(enum)和常量类(通常是带有只读属性的类)都有其适用场景:

适合定义枚举值的场景:

  1. 有限且命名的集合
    当你需要表示一组固定的、可枚举的值,并且每个值都有一个明确的名字时,使用枚举类型是合适的。例如,星期几、月份、状态码等。

    enum HttpStatusCode {
      OK = 200,
      Created = 201,
      BadRequest = 400,
      Unauthorized = 401,
      NotFound = 404,
    }
    
  2. 意图清晰
    枚举有助于提高代码的可读性与自解释性,阅读者可以直接通过名称了解变量或函数参数的意义。

  3. 类型安全
    TypeScript 编译器可以对枚举类型的变量进行静态类型检查,确保在编译阶段就能捕获到类型不匹配的问题。

适合定义常量类的场景:

  1. 包含多个相关常量
    当需要定义一组相关的常量,每个常量代表不同的概念,但它们之间可能有共同的上下文或者逻辑关系时,可以考虑使用常量类。例如,定义一组坐标系原点坐标和单位长度。

    class CoordinateSystem {
      static readonly ORIGIN_X: number = 0;
      static readonly ORIGIN_Y: number = 0;
      static readonly UNIT_LENGTH: number = 10;
    }
    
    // 使用时
    const x = CoordinateSystem.ORIGIN_X;
    
  2. 复杂结构
    如果常量具有更复杂的结构,比如对象或数组,而不是单一的原始类型值,那么常量类中的只读属性会更加合适。因为枚举成员不能直接包含这些复杂类型。

  3. 方法支持
    常量类还可以包含一些辅助方法,这些方法基于常量值提供服务。尽管对于纯粹的常量而言这不是必需的,但在某些情况下它能提升代码组织性和便利性。

总结来说,选择枚举还是常量类主要取决于你的需求是否为命名集合以及是否需要额外的功能。简单、可枚举的命名值集通常更适合用枚举来表达,而当需要存储和组织更多元化、结构化的常量数据时,则倾向于使用常量类。

一、何时使用自定义常量

1、单独的常量值:当您需要定义单个不变的值时,如配置值、数学常数等。

2、不属于同一类别的常量:如果常量之间没有逻辑关联,它们可能属于不同的类别

比如一些配置信息,如最大用户数

二、何时使用枚举类

1、固定的常量集合:当您有一组固定的常量,且它们在逻辑上属于同一类别时,使用枚举是最佳选择。例如,星期(MONDAY, TUESDAY, …)、季节(SPRING, SUMMER, …)等。

2、需要类型安全:枚举提供类型安全,即您只能选择枚举中定义的值,减少了运行时错误。

3、关联行为和属性:如果每个常量都与特定的行为和属性相关联,枚举允许您将这些信息和行为封装在一个地方。

比如文件上传状态,鼠标拖拽状态,颜色、方向、角色、大小、等,均适合使用枚举

使用枚举可以提高代码的组织性和可读性,尤其是当常量属于同一类别且相关联时。

https://developer.aliyun.com/article/1410384#slide-5

标签:场景,定义,适合,枚举,类型,常量
From: https://www.cnblogs.com/longmo666/p/18034962

相关文章

  • 把 Console 部署成 Windows 服务,四种方式总有一款适合你!
    一:背景1.讲故事上周有一个项目交付,因为是医院级项目需要在客户的局域网独立部署。程序:netcore2.0,操作系统:windowsserver2012,坑爹的事情就来了,netcoresdk一直装不上,网上找了资料说需要先安装VisualC++RedistributableforVisualStudio2015,开开心心下载下来又......
  • Springboot的starter有什么用以及如何自定义一个starter
    SpringBoot的starter是什么我们都知道SpringBoot的目的就是为了让开发者尽可能的减少项目配置专注于程序代码的编写,而'starter'就是SpringBoot简便开发、自动装配的具体实现。以‘mybatis-spring-boot-starter’为例:<dependency><groupId>org.mybatis.spring.boot<......
  • Python嵌套绘图并为条形图添加自定义标注
    论文绘图时经常需要多图嵌套,正好最近绘图用到了,记录一下使用Python实现多图嵌套的过程。首先,实现Seaborn分别绘制折线图和柱状图。'''绘制折线图'''importseabornassnsimportmatplotlib.pyplotaspltimportwarningswarnings.filterwarnings("ignore","use_inf_as_n......
  • SSH框架使用AOP代理+自定义注解遇到的相关问题总结
    1、AOP注解失效问题编写完成注解和AOP切面类时,在controller中加上注解,注解不生效。在配置文件xml中开启AOP注解:<aop:aspectj-autoproxyproxy-target-class="true"/>如果该配置以加在项目里,但是还是不生效。需要检查一下自己的项目是否是Spring.xm分层配置的。如果分层配置的,需......
  • JdbcTemplate 自定义返回的结果集字段和实体类映射
    废话不多:抄袭代码packagecom.webank.wedatasphere.qualitis.handler;importcom.webank.wedatasphere.qualitis.response.Grid;importcom.webank.wedatasphere.qualitis.response.SelectRuleResponse;importorg.springframework.beans.factory.annotation.Autowired;impo......
  • 选择最适合数据的嵌入模型:OpenAI 和开源多语言嵌入的对比测试
    OpenAI最近发布了他们的新一代嵌入模型embeddingv3,他们将其描述为性能最好的嵌入模型,具有更高的多语言性能。这些模型分为两类:较小的称为text-embeddings-3-small,较大且功能更强大的称为text-embeddings-3-large。这些模型的设计和训练方式的信息披露得很少,模型只能通过付......
  • python如何将自定义目录添加到sys.path中,如何将自定义目录从sys.path中删除
    python如何将自定义目录添加到sys.path中,如何将自定义目录从sys.path中删除背景:在python脚本中,经常需要将自定义的包导入当前脚本,但该包并非pip安装,不在sys.path中,无法直接导入,所以需要临时导入自定义包;另外有时候将自定义的包永久写入了sys.path后,但实际又用不到该包,需要将自定......
  • 需求结构化:数据定义
    1背景前文以实例的形式讨论了用例生成、需求检查等功能。这些功能可行的前提,是需求逻辑能够被计算机程序正确的识别、计算。所谓需求结构化,是将非结构化需求转换为结构化需求的过程。而所谓结构化需求,是指基于明确语法表达的需求。结构化需求是半形式化的(semi-formal),可以转换为......
  • SpringBoot:通过实现自定义接口获取实现类的@RequestMapping注解请求路径
    1.自定义接口//什么都不用写,就定义一个空接口publicinterfaceMyMark{}2.Controller接口类实现自定义接口@RestControllerpublicclassDayControllerimplementsMyMark{@RequestMapping("/day1")publicStringget1(){return"day1";}......
  • 基于yolov2深度学习网络的车辆检测算法matlab仿真,包括白天场景和夜晚场景
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述     基于YOLOv2深度学习网络的车辆检测是一种高效的目标检测算法,广泛应用于交通监控、自动驾驶等领域。YOLOv2是YouOnlyLookOnce(YOLO)系列算法的第二代,相较于第一代在速度和准确......