TypeScript枚舉類型

1.概述

所謂的枚舉類型就是為一組數值賦予名字。

enum類型在C++、Java語言中比較常見,TypeScriptJavaScript原有的類型基礎上也增加瞭enum類型。

比如我們需要定義一組角色,需要使用數字表示,就可以使用如下代碼定位:

enum role{
    STUDENT,
    TEACHER,
    ADMIN
}


上面代碼中我們定義瞭role為一個枚舉類型,這個裡面有是三個值,TypeScript會為每個值自動的分配序號,默認從0開始依次排列,它們的值依次為0 1 2。

當然我們也可以自定義每個值,如果非全部定義則後面的值會根據前面的值自增。

示例代碼如下:

enum role1 {
    student = 1,
    // 後面兩個值依次為2 3
    teacher,
    admin,
}
enum role2 {
    // 每個名具有指定的值
    student = 1,
    teacher = 3,
    admin = 6,
}

2.數字枚舉

我們上面介紹的例子就是數字枚舉類型,但是還有一個註意點就是如果某個字段使用瞭常量或者計算後的值 ,我們就必須設置緊跟著字段的初始值 ,否則將會拋出異常。

示例代碼如下:

;(function () {
  // 定義一個函數
  const getValue: () => number = (): number => {
    return 0
  }

  enum role1 {
    student = getValue(),
    // teacher, // error 枚舉成員必須具有初始化表達式。
    // admin, // error 枚舉成員必須具有初始化表達式。
  }
  const TEACHER_ROLE: number = 3
  // 每個名具有指定的值
  enum role2 {
    student,
    teacher = TEACHER_ROLE,
    // admin, // error 枚舉成員必須具有初始化表達式。
  }
})()

2.1反向映射

所謂的反向映射就是可以通過key訪問到value,通過value訪問到key。

我們可以通過.名稱或者[‘名稱’]的方式取到每個具體的值,也可以通過[數值]的方式取到每個數值對應的名稱,

示例代碼如下:

enum role {
    student,
    teacher,
    admin,
}
console.log(role.admin) // 2
console.log(role['teacher']) //1
console.log(role[0]) //‘student'

其實TypeScript中的枚舉類型編譯成JavaScript代碼之後就是一個對象,我們將上面那個枚舉類型編譯一下,

編譯後的代碼如下:

"use strict";
var role;
(function (role) {
    role[role["student"] = 0] = "student";
    role[role["teacher"] = 1] = "teacher";
    role[role["admin"] = 2] = "admin";
})(role || (role = {}));


這樣看我們可能好理解,其實就是通過一個自調函數將值賦值給role對象,賦值之後如下:

var role = {
    "student": 0,
    "teacher": 1,
    "admin"  : 2, 
    0: "student", 
    1: "teacher", 
    2: "admin", 
} 


值得註意的是 反向映射僅僅支持在數字枚舉 中,不支持在2.4版本中新增的字符串枚舉 中。

3.字符串枚舉

所謂的字符串枚舉就是枚舉中的每個字段的值必須都是字符串,或者是枚舉中的其他字段,

示例代碼如下:

enum Person {
  name = '一碗周',
  hobby = 'coding',
  // 設置枚舉中的字段作為值
  myName = name,
}
console.log(Person.name, Person.myName) // 一碗周 一碗周

4.const枚舉

在我們定義瞭普通枚舉之後,被編譯成JavaScript代碼之後會創建一個對應的對象,如果使用枚舉是增瞭增加程序的可讀性,且並不需要編譯之後的對象。在TypeScript1.4中增加瞭const枚舉。

const枚舉被翻譯為完全嵌入枚舉 ,所謂的完全嵌入枚舉就是編譯之後沒有對應的對象,隻是從枚舉中拿到對應你的值然後進行替換。定義const枚舉隻需要在普通枚舉前面加上const關鍵字。

示例代碼如下:

const enum role {
    student,
    teacher,
    admin,
}
let admin = role.admin

如上代碼會被編譯為如下:

let admin = 2 /* admin */;


5.總結

這篇文章介紹瞭兩種基本的枚舉類型:數字枚舉 和字符串枚舉 ,數組枚舉還有一個反射映射的概念,就是可以通過key訪問value,通過value可以訪問key;最後我們還介紹瞭const枚舉,就是編譯後不生成所謂的枚舉對象。

到此這篇關於TypeScript枚舉類型的文章就介紹到這瞭,更多相關TypeScript枚舉 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: