TypeScript 枚举和常量区别
日常写代码的时候,很多刚接触TypeScript的小伙伴,经常会把枚举和常量搞混,要么觉得它们是一回事,要么分不清啥时候该用哪个。其实这俩东西都是用来存固定值的,就像家里的分类收纳盒,但用途和用法差别还真不小。
先搞懂:常量是什么?
常量就是咱们提前定好的、不会变的值,比如代码里写的const PI = 3.14159,或者存星期几的const MON = 1, TUE = 2。它就像你家里贴在冰箱上的便签,写死了“周一=1”,不管谁看,周一永远是1,不会变。

举个生活化的例子:你开奶茶店,规定大杯是“L”,中杯是“M”,小杯是“S”。要是用常量写,就是const CUP_L = "L"; const CUP_M = "M"; const CUP_S = "S"。这样员工敲代码点单的时候,只能输这三个值,不会乱输“large”“大杯”这种不统一的内容,避免出错。
不过常量有个小问题:如果你想知道“大杯对应的是哪个值”,得去翻常量定义的地方,比如你看到代码里写selectCup(CUP_L),得想半天才反应过来这是选大杯,不能直接从代码里看出来“CUP_L就是大杯”,得来回跳着找,有点麻烦。
再说说:枚举是什么?
枚举是TypeScript里专门用来管理一组固定值的“专属收纳盒”,相当于你给每个固定值贴了标签和内容,一目了然。还是拿奶茶店的例子,用枚举写的话就是:
`typescript
enum CupSize {
Large = "L",
Medium = "M",
Small = "S"
}
`
这就像你给每个杯子都贴了写着“大杯=L”“中杯=M”“小杯=S”的标签,你看到代码里写selectCup(CupSize.Large),不用找定义,一眼就知道这是选大杯的意思,特别直观。
枚举还有个更贴心的功能:如果不给每个值手动赋值,它会自动按顺序编序号。比如enum Weekday { Mon, Tue, Wed },Mon默认是0,Tue是1,Wed是2,就像学校给学生按学号排队,不用你挨个记学号,系统自动搞定。
核心区别:别再搞混了!
两者的差别其实就三个关键点,记下来就不会错:
第一,可读性不一样。常量是“值的名字”,看代码得猜意思;枚举是“标签+值”,比如CupSize.Large直接说清是“大杯”,不用猜。
第二,用法场景不同。如果只是存几个固定值,比如存圆周率、存奶茶杯型,常量够,但要是需要让别人一眼看懂代码里的固定值,比如函数参数的合法值,枚举更合适。还有,枚举支持自动编序号,常量得自己写值,少一个都不行。
第三,编译后表现不一样。常量编译后就是普通的变量,不会有额外内容;枚举编译后会生成一个“双向映射”的对象,刚才的CupSize编译后会变成{0: "Mon", Mon: 0},既能通过名字找值,也能通过值找名字,这是常量做不到的。
最后再举个实际用的小例子:如果做用户性别选择,用常量写是const GENDER_M = "男"; const GENDER_F = "女",代码里要写gender = GENDER_M;用枚举写就是enum Gender { Male = "男", Female = "女" },代码里直接写gender = Gender.Male,别人一看就懂,后续维护也不用来回翻常量定义,是不是省心多了?