TS基础 —— 枚举

本文介绍了 TypeScript 中的枚举类型,包括数字枚举、字符串枚举、异构枚举及其用法,强调了枚举在代码中赋予数字或字符串含义的重要性,以及如何进行反向映射和常量与计算值的区分。
摘要由CSDN通过智能技术生成

  • 为什么要使用枚举
    • 枚举允许我们在开发过程中,为一组数组中的每一个元素赋予名称,如现在我们有一个number类型数组[1,2,3],这时每个元素实际上没有明确的名称或意义,但是当我们使用枚举为这个数组的每个元素规定了名称,那么就很方便的对应起来了。
    enum liveStatus{
    	Living = 1,
    	reply,
    	ended
    }
    
    首先我们将这个数组定义了一个名称是liveStatus,表示这个数组表示的含义是直播的状态,依次元素1对应的名称是直播中(Living),元素2对应的名称是回放(reply),元素3对应的名称是已结束(ended)。
    这样当我们得到1,如从后端返回这个status是1,那么我们很容易可以从这个枚举中获取到对应的状态,实际上是正在直播。
  • 枚举简介

    • 枚举是一个键值对的形式,可以看成是JavaScript中的JSON对象一样。

    • TS使用 enum 关键词声明枚举。

    • 如何创建一个枚举,以数字枚举举例

      • 使用enum关键词,关键词后接枚举的名称,然后创建一个大括号块,并在这个块里指定枚举成员。
      enum Direction{
        North = 1,
        East, //默认递增,所以值是2
        South, //值是3
        West, //值是4
      };
      
  • 数字枚举

    • 数字枚举的成员都是number类型的。

    • 对于数字枚举,如果没有对枚举对象中的枚举成员赋值,那么会默认从枚举对象中的第一个枚举成员的值是0,并依次递增。

    • 如果想利用枚举对象的不同枚举成员获取不同的状态,那么可以使用switch。(因为后端返回enum类型的时候,尤其是数字枚举,只会返回对应的数字值)

      • enum liveStatus{
          Living = 1,
          reply,
          preview,
        }
        
        swicth (status)
        case liveStatus.Living:
         return '直播中'
        case liveSatus.reply:
         return '回放'
        case liveStatus.preview:
         return '预告'
        
        
    • 数字枚举的反向映射

      • 数字枚举允许从value访问到key的反向映射。

        enum device{
          phone = 1,
          notebook,
          desktop,
        }
        

        我们可以知道,phone对应的value是1,notebook对应的value是2,desktop对应的value是3。

        正常来说,我们可以利用notebook来访问到2

        console.log(device.notebook) //2
        

        对于数字枚举,我们也可以通过2来访问到notebook。

        console.log(device[2]) //notebook
        
  • 字符串枚举

    • 字符串枚举的枚举成员都是string类型。

    • 字符串枚举没有反向映射。

      enum device{
        phone = "1",
        notebook = "2",
        desktop = "3",
      }
      
    • 字符串枚举不能递增,所以必须对字符串枚举对象中的每一个枚举成员赋值。

      enum device{
        phone = "1",
        notebook
      }
      

      这样就会报错,错误是“枚举成员必须具有初始化表达式”。

  • 异构枚举

    • 一个异构枚举对象可以包括2种枚举成员

      • 数字枚举成员
      • 字符串枚举成员
    • 我们很少使用异构枚举

      enum Person{
        name = "aaa",
        age = 18
      }
      
    • 异构枚举中的常见错误

      enum Person{
        name = "aaa",
        age = 3*6
      }
      

      上面的枚举会报错,错误是“含有字符串值成员的枚举中不允许使用计算值”,含义是当枚举对象中存在有value是字符串的枚举成员的时候,不能将其他枚举成员的value设置为计算值。

  • 枚举成员的值的2种形式:计算值和常量

    • 枚举对象中的每一个枚举成员都对应一个value,这个value有2种形式,它可能是计算值 或 常量。

    • 我们可以通过枚举成员表达式来判断枚举成员的value是计算值还是常量。只要是枚举成员的value是枚举成员表达式,那么这个value一定是常量。

    • 判断是否是枚举成员表达式的方法

      • 当满足以下5个条件中的任一个,那么就是枚举成员表达式
        • 一个枚举表达式字面量(主要是字符串字面量或数字字面量)。
        • 一个对之前定义的常量枚举成员的引用
        • 带括号的常量枚举表达式
        • 一元运算符 ++、 – 其中任一个应用在了常量枚举表达式
        • 常量枚举表达式是二元运算符 + 、-、*、/、%、<<、>>、&、|、^的操作对象。如果求值后值为NaN或Infinity,那么会在编译阶段报错。
    • 常量例子

      enum Obj{
        index, //枚举表达式字面量
        index1 = index, //引用常量枚举成员
        age = 2 << 1, //枚举表达式字面量参与二元运算符
        num = 30 | 2,
        num1 = 10 + 29
      }
      
    • 计算值例子

      enum Obj{
        nameLen = 'aaa'.length, //不满足上面任何条件,那么是计算值
        num = Math.random() * 100
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值