數字枚舉
enum Role {
Reporter = 1,
Developer,
Maintainer,
Owner,
Guest
}console.log(Role.Reporter) // 1console.log(Role.Developer) // 2console.log(Role[2]) // 'Developer'複制代碼
預設第一個成員的值為0,後面成員的值依次遞增,但是也可以給每個成員指派一個初始值,可以通過字元串去索引數字,也可以通過數字去索引字元串
字元串枚舉
enum Message {
Success = 'success',
Fail = 'fail'}console.log(Message.Success) // 'success'console.log(Message['success']) // undefined複制代碼
隻能通過Success去索引success,不能反過來用success去索引Success
異構枚舉
enum Answer {
N,
Y = 'Yes'}console.log(Answer.N) // 0console.log(Answer.Y) // 'Yes'複制代碼
枚舉的成員中同時出現數字和字元串,不建議使用
枚舉成員
enum Char {// const member(常量枚舉成員)a,
b = Char.a,
c = 1 + 3,// computed member(計算枚舉成員)d = Math.random(),
e = '123'.length,
f = 4}複制代碼
常量枚舉成員會在編譯階段計算出結果,然後以常量值的方式出現在運作環境,計算枚舉成員不會在編譯階段被計算,會被保留到運作階段,在運作階段才會計算出結果。注意:在計算成員後面的枚舉成員一定要指派一個初始值
// ts編譯結果"use strict";var Char;
(function (Char) {// const member(常量枚舉成員)Char[Char["a"] = 0] = "a";
Char[Char["b"] = 0] = "b";
Char[Char["c"] = 4] = "c";// computed member(計算枚舉成員)Char[Char["d"] = Math.random()] = "d";
Char[Char["e"] = '123'.length] = "e";
Char[Char["f"] = 4] = "f";
})(Char || (Char = {}));複制代碼
常量枚舉
使用const定義的枚舉叫常量枚舉,特點是代碼會在編譯後被移除
const enum Month {
Jan,
Feb,
Mar,
Apr = Month.Mar + 1,
}
let month = [Month.Jan, Month.Feb, Month.Mar]複制代碼
// 編譯後代碼"use strict";let month = [0 /* Jan */, 1 /* Feb */, 2 /* Mar */];複制代碼
枚舉類型
- 枚舉成員沒有初始值
- 枚舉成員都是數字枚舉
- 枚舉成員都是字元串枚舉
// 枚舉成員沒有初始值
enum E { a, b }
// 枚舉成員都是數字枚舉
enum F { a = 0, b = 1 }
// 枚舉成員都是字元串枚舉
enum G { a = 'apple', b = 'banana' }
// 可以把任意的數字指派給E和F類型
let e: E = 3
let f: F = 3
e === f // 報錯,不同枚舉類型不能互相比較
// 變量定義為枚舉成員類型
let e1: E.a = 3
let e2: E.b = 3
let e3: E.a = 3
console.log(e1 === e2) // e1和e2是不同的枚舉成員類型,會報錯
console.log(e1 === e3) // true e1和e3是相同的枚舉成員類型,可以比較
// 字元串枚舉的取值隻能是枚舉成員的取值
let g1: G = G.a
let g2: G.a = G.a複制代碼