19、TypeScript 实战 - 枚举类型

写一个小demo
随机数喝酒游戏,我们随机摇到几就喝几杯酒

写一个随机数 随机生成0-6

const RandomNumber = Math.round(Math.random()*6)

再写一个方法


function Drink(num:number):string{
   
     
    if(num==0){
   
     
        return "免喝"
    }else if(num==1){
   
     
        return "喝一杯"
    }else if(num==2){
   
     
        return "喝两杯"
    }else if(num==3){
   
     
        return "喝三杯"
    }else if(num==4){
   
     
        return "喝四杯"
    }else if(num==5){
   
     
        return "喝五杯"
    }else if(num==6){
   
     
        return "喝六杯"
    }
    
}
console.log(Drink(RandomNumber))

这就简单的完成了我们的需求,但是上面的写法是初级者的写法。
我们来改造一下,如下代码

const RandomNumber = Math.round(Math.random()*6)

const Status ={
   
     
   zero:0,
   one:1,
   two:2,
   three:3,
   four:4,
   five:5,
   six:6,
}

function Drink(num:number):string{
   
     
    if(num==Status.zero){
   
     
        return "免喝"
    }else if(num==Status.one){
   
     
        return "喝一杯"
    }else if(num==Status.two){
   
     
        return "喝两杯"
    }else if(num==Status.three){
   
     
        return "喝三杯"
    }else if(num==Status.four){
   
     
        return "喝四杯"
    }else if(num==Status.five){
   
     
        return "喝五杯"
    }else if(num==Status.six){
   
     
        return "喝六杯"
    } 
}
console.log(Drink(RandomNumber))

但是上面还是不够高级,高级写法就会用到我们的枚举类型enum,如下代码

const RandomNumber = Math.round(Math.random()*6)
enum Status {
   
     
    zero,
    one,
    two,
    three,
    four,
    five,
    six
}
function Drink(num:number):string{
   
     
    if(num==Status.zero){
   
     
        return "免喝"
    }else if(num==Status.one){
   
     
        return "喝一杯"
    }else if(num==Status.two){
   
     
        return "喝两杯"
    }else if(num==Status.three){
   
     
        return "喝三杯"
    }else if(num==Status.four){
   
     
        return "喝四杯"
    }else if(num==Status.five){
   
     
        return "喝五杯"
    }else if(num==Status.six){
   
     
        return "喝六杯"
    } 
}
console.log(Drink(RandomNumber))

枚举类型的对应值

此时我们传值一个1,会输出喝一杯

console.log(Drink(1));
//打印结果:喝一杯

这看起来很神奇,这是因为枚举类型是有对应的数字值的,默认是从 0 开始的。我们直接用console.log()就可以看出来了。

console.log(Status.zero); //打印结果为:0
console.log(Status.one);//打印结果为:1
console.log(Status.two);//打印结果为:2
console.log(Status.three);//打印结果为:3
console.log(Status.four);//打印结果为:4
console.log(Status.five);//打印结果为:5
console.log(Status.six);//打印结果为:6

以看出结果就是0,1,2,3,4,5,6。这时候不想默认从 0 开始,而是想从 10开始。可以这样写

enum Status {
   
     
    zero = 10,
    one,
    two,
    three,
    four,
    five,
    six
}

我们可以枚举通过下标来反查一下是否是从10开始的

console.log(Status.zero)
console.log(Status.one)
console.log(Status[10])
console.log(Status[11])

输出的结果为: 10 11 zero one