TS (enum)枚举

枚举(enum)可以定义一组命名常亮,增强代码的可读性,也可以让代码更好的维护。

在刚开始先来一段代码来感受一下:

function walk(str: string) {
  if (str === 'up') {
    console.log('向【上】⾛')
  } else if (str === 'down') {
    console.log('向【下】⾛')
  } else if (str === 'left') {
    console.log('向【左】⾛')
  } else if (str === 'right') {
    console.log('向【右】⾛')
  } else {
    console.log('未知⽅向')
  }
}

walk('up')
walk('down')
walk('left')
walk('right')

数字枚举

数字枚举是一种最常见的枚举类型,其成员的值会自动递增,并且数字枚举还具备反向映射的特点。

看以下代码:

enum Direction {
  Up,
  Down,
  Left,
  Right
}

console.log(Direction) // 打印Direction会看到如下内容
/*
    {
    0:'Up',
    1:'Down',
    2:'Left',
    3:'Right',
    Up:0,
    Down:1,
    Left:2,
    Right:3
    }
    */

// 反向映射
console.log(Direction.Up)
console.log(Direction[0])

// 此⾏代码报错,枚举中的属性是只读的
Direction.Up = 'shang'

经过改良后的代码可以写成这样:

enum Direction {
  Up,
  Down,
  Left,
  Right
}

function walk(n: Direction) {
  if (n === Direction.Up) {
    console.log('向【上】⾛')
  } else if (n === Direction.Down) {
    console.log('向【下】⾛')
  } else if (n === Direction.Left) {
    console.log('向【左】⾛')
  } else if (n === Direction.Right) {
    console.log('向【右】⾛')
  } else {
    console.log('未知⽅向')
  }
}

walk(Direction.Up)
walk(Direction.Down)

字符串枚举

顾名思义,枚举成员的值是字符串

enum Direction {
  Up = 'up',
  Down = 'down',
  Left = 'left',
  Right = 'right'
}

let dir: Direction = Direction.Up
console.log(dir) // 输出: "up"

常亮枚举

官方描述:常亮枚举是一种特殊枚举类型,它使用  const  关键字进行定义,在编译的时候避免生成一些额外的代码。

接下来看一个对比:

这是不适用常亮枚举的:

enum Directions {
  Up,
  Down,
  Left,
  Right
}

let x = Directions.Up

编译后的是这样的:

'use strict'
var Directions
  ;(function (Directions) {
  Directions[(Directions['Up'] = 0)] = 'Up'
  Directions[(Directions['Down'] = 1)] = 'Down'
  Directions[(Directions['Left'] = 2)] = 'Left'
  Directions[(Directions['Right'] = 3)] = 'Right'
})(Directions || (Directions = {}))

let x = Directions.Up

 这是只用常亮枚举的:

const enum Directions {
  Up,
  Down,
  Left,
  Right
}

let x = Directions.Up

编译后的:

"use strict";
let x = 0 /* Directions.Up */;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LJ小番茄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值