本文摘自PHP中文网,作者青灯夜游,侵删。
本篇文章给大家介绍一下TypeScript中Enum(枚举)语法,聊聊Enum的基本用法,如何使用原生JavaScript来实现Enum。
Enum
Enum 是在 TypeScript 中新增的语法,也叫做枚举,一般用它来管理多个相同系列的常量(即不能被修改的变量),用于状态的判断。
在 Web 中比较常见的状态判断,是在处理请求时,要针对不同的响应状态码做对应的处理:
1 2 3 4 5 6 7 8 9 10 11 12 | const handleResponseStatus = (status: number): void => {
switch (status) {
case 200:
break ;
case 400:
break ;
default :
throw ( new Error( 'No have status code!' ));
}
};
|
但因为响应状态码都是预先定义好的,所以没什么争议,代码写成这样看也很正常,但是如果后端在服务器发生错误时自定义了一些编码,并告诉前端,这些代码都代表什么错误,那么上面的函数可能会变成这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | const handleWrongStatus = (status: string): void => {
switch (status) {
case 'A' :
break ;
case 'B' :
break ;
case 'C' :
break ;
default :
throw ( new Error( 'No have wrong code!' ));
}
};
|
如果是这种代码,别说是刚接手的人,就算是你自己两星期前写的,恐怕不去翻文档也想不起它们都代表什么了吧。
但是如果善用 Enum ,就可以避免上述发生的情况。
基本用法
先来看看 Enum 该怎么定义,它和 Object 的用法很像:
1 2 3 4 | enum requestStatusCodes {
error,
success,
}
|
不需要在内容与名称之间加等号,直接在大括号内叙述该 Enum 中具有哪些变量,与其说是变量,不如说是常量更恰当些,因为在 Enum 中的值是不可修改的,所以也不必担心这些定义好的规则会在代码执行的过程中发生改变,导致执行错误。
而既然 Enum 是用来定义同一个系列常量的,那这些常量应该都能维护特定的值。没错,在 Enum 中的每个常量,都可以通过 =
来指定具体的值 。
但如果是像前面的 requestStatusCodes
,没有为 error
或 success
指定具体的值也不会出错,因为 TypeScript 会从 0
开始自动递增定义值,所以签名的 requestStatusCodes
会和下面的结果相同:
1 2 3 4 5 | enum requestStatusCodes {
error = 0,
success = 1,
}console.log(requestStatusCodes.error)
console.log(requestStatusCodes.success)
|
除了数字外,也可以定义为字串:
1 2 3 4 5 | enum requestWrongCodes {
missingParameter = 'A' ,
wrongParameter = 'B' ,
invalidToken = 'C' ,
}console.log(requestWrongCodes.wrongParameter)
|
当然也可以在一个 enum 中设定不同的类型,但这样一点意义都没有:
1 2 3 4 | enum requestStatusCodes {
error = 0,
success = 'OK' ,
}
|
了解基本的 Enum 怎么定义后,接着就来改写前面代码中的 handleResponseStatus
和 handleWrongStatus
,让它们在语义上能够更明确。
首先用 Enum 定义两者的状态描述:
1 2 3 4 5 6 7 8 9 10 | enum requestStatusCodes {
error = 400,
success = 200,
}
enum requestWrongCodes {
missingParameter = 'A' ,
wrongParameterType = 'B' ,
invalidToken = 'C' ,
}
|
然后修改 handleResponseStatus
和 handleWrongStatus
中的 Switch 判断:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | const handleResponseStatus = (status: number): void => {
switch (status) {
case requestStatusCodes.success:
break ;
case requestStatusCodes.error:
break ;
default :
throw ( new Error( 'No have status code!' ));
}
};
const handleWrongStatus = (status: string): void => {
const { missingParameter, wrongParameterType, invalidToken, } = requestWrongCodes;
switch (status) {
case missingParameter:
break ;
case wrongParameterType:
break ;
case invalidToken:
break ;
default :
throw ( new Error( 'No have wrong code!' ));
}
};
|
修改后的代码就变得直观多了,因为状态码都被放到了 Enum 中统一管理,所以就能用常量名来代表它们,之后不管过了多久,可以明确的知道这里再做什么,甚至连注解或文档都不用写了,因为代码就是最好的文档。
阅读剩余部分
相关阅读 >>
javascript日期格式如何转换成年月日
javascript中dom常用的方法有哪些
详解javascript之作用域
js中的var是什么意思
javascript语言有什么特点
classname和a href 的实例详解
快来看看 ajax实时刷新处理
javascript:世界上最被误解的语言
介绍javascript实现定时器倒计时
javascript如何制作下拉菜单
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 聊聊TypeScript中Enum(枚举)的用法