枚举类型
枚举类型是 TypeScript 相较于 JavaScript 而言特有的部分。一个简单的枚举声明如下:
enum HTTPStatus {
OK,
NOT_FOUND,
INTERNAL_STATUS_ERROR,
}
与编译成 JavaScript 的代码相比较:
显然 TypeScript 非常的简洁。
尝试使用上述枚举类型:
function processHTTPStatus(s: HTTPStatus) {
if(s === HTTPStatus.OK) {
console.log("good response")
} else {
console.log("bad response")
}
console.log(s)
}
processHTTPStatus(HTTPStatus.OK)
发现输出是:
[LOG]: "good response"
[LOG]: 0
原因是 enum 类型当中的值按照给定的顺序从 0、1、2 开始编排。我们可以显式地为枚举类型赋值:
enum HTTPStatus {
OK = 200,
NOT_FOUND = 404,
INTERNAL_STATUS_ERROR = 500,
}
另外一个要解决的问题是,我们如何通过 500 来反推出 INTERNAL_STATUS_ERROR 呢?方法也非常的简单,类似于字典的查找:
function processHTTPStatus(s: HTTPStatus) {
console.log(HTTPStatus[s]) // <-- 类似于字典的查找来反推枚举类型
}
processHTTPStatus(HTTPStatus.INTERNAL_STATUS_ERROR)
输出为:
[LOG]: "INTERNAL_STATUS_ERROR"