TypeScript:enum枚举类型

提出问题

定义函数,形参的值只能是 星期一 ~ 星期日,如果传入是 星期六、星期日 就打印 周末休息,否则就打印 工作日上班

代码:

function isWork( week : string) : void {
    if(week == '星期六' || week == '星期日'){
        console.log("周末休息")
    }else{
        console.log("工作日去上班")
    }
}
isWork('星期三')
isWork('星期六')

缺点

可以传入不合理的值,如下:

isWork('星期八')
isWork('李雷')

解决

使用枚举

枚举介绍

枚举是一组 固定的可选值

应用场景

作为函数形参的类型,如:

  • 限制传参只能是 星期一、星期二、星期三、星期四、星期五、星期六、星期日,是固定的,只能选择之一

  • 限制传参只能是 交通灯的 红、绿、黄,是固定的,只能选择之一

好处

可以做 校验,当传入其他值时,会报错

对比函数形参的字面量类型

函数形参推荐使用字面量类型,更加方便、高效

声明

使用 enum 关键字修饰,enum 的全称为 enumeration

enum 枚举名 { 成员1,成员2,成员3}

解释:

  • enum:定义枚举
  • 枚举名:规范要求首字母大写
  • 成员:规范要求首字母大写

例子

enum Week {Mon,Tue,Wed,Thur,Fri,Sat,Sun}

访问成员

通过下面方式使用:

枚举名.成员

例子

console.log(Week.Mon)

案例

  1. 定义枚举 Week,成员是:Mon,Tue,Wed,Thur,Fri,Sat,Sun

  2. 定义函数,形参是 Week 类型,如果传入是 星期六、星期日 就打印 周末休息,否则就打印 工作日上班

代码:

enum Week {Mon,Tue,Wed,Thur,Fri,Sat,Sun}

function isWork( week : Week) : void {
    console.log(week) // 打印枚举值
    if(week == Week.Sat || week == Week.Sun){
        console.log("周末休息")
    }else{
        console.log("工作日去上班")
    }
}

isWork(Week.Mon)
isWork(Week.Sun)

isWork('星期八') // 报错

成员的默认值

枚举成员的默认值,从 0 开始 自增,依次是 0,1,2...

例子

enum Week {Mon,Tue,Wed,Thur,Fri,Sat,Sun}

function enumValue(week : Week) :void {
    console.log(week) // 打印枚举成员值
}

enumValue(Week.Mon)
enumValue(Week.Sun)

执行结果:

0
6

指定成员的值-数字类型

enum Week {Mon = 10,Tue = 100,Wed,Thur,Fri,Sat,Sun}

解释:

  • 成员 Mon的值是 10
  • 成员 Tue的值是 100
  • 成员 Wed的值是 Tue 的 值 + 1,即:101
  • 成员 Thur的值是 Wed 的 值 + 1,即:102

注意: 值是数字类型时,才会 自增 1

例子:

function enumValue(week : Week) :void {
    console.log(week) // 打印枚举成员值
}

enumValue(Week.Mon)
enumValue(Week.Tue)
enumValue(Week.Wed) // Tue 的值 + 1
enumValue(Week.Thur) // Wed 的值 + 1

执行结果:

10
100
101
102

指定成员的值-字符串类型

指定字符串类型后,就需要为每个成员指定值

enum Week {
    Mon = '星期一',
    Tue = '星期二',
    Wed = '星期三',
    Thur = '星期四',
    Fri = '星期五',
    Sat = '星期六',
    Sun = '星期日'
    }

function enumValue(week : Week) :void {
    console.log(week) // 打印枚举成员值
}

enumValue(Week.Mon)
enumValue(Week.Tue)
enumValue(Week.Wed)
enumValue(Week.Thur)

错误

enum Week {Mon = '星期一',Tue,Wed,Thur,Fri,Sat,Sun}

由于指定 Mon 的值是字符串,其他成员没有指定值,执行会报错,如下:


原文出处:/show_1IX5LzjBJvbA.html