TypeScript———枚舉

枚舉

在 TS 中可以通過枚舉定義一些帶名字的常量。

數字枚舉

enum Driection {
	Up = 1,
	Down,
	Left,
	Right
}

這段代碼定義了一個名爲 Direction 的枚舉,其中 Up 初始值爲1,則其他成員會依次遞增 2 3 4。
需要注意的是,如果不給成員初始化,默認會從1開始遞增。

使用枚舉:

enum Response {
	No = 0,
	Yes = 1
}

console.log(Response.Yes) // 輸出 0

字符串枚舉

不同於數字枚舉的自動遞增初始化,字符串枚舉需要自行初始化成員的值。
例如:

enum Direction {
	Up = "UP",
	Down = "DOWN",
	LEFT = "LEFT",
	Right = "RIGHT"
}

異構枚舉

即枚舉內部可以混合使用字符串和數字成員。
例如:

enum StringAndNumber {
	No = 0,
	Yes = "YES"
}

計算和常量成員

計算和常量成員是指在一定情況下,枚舉會對成員進行一定的計算初始化過程。
例如:

enum InitData {
	initData
}

// 此時initData會初始化爲0

還有一些其他情況,這裏就不一一列舉,有興趣的同學可以去官網閱讀

聯合枚舉與枚舉成員

字面枚舉成員就是一種特殊的非計算的常量枚舉成員的子集。
字面枚舉成員指不帶有初始值的常量枚舉成員,或被初始化爲:任何字符串字面量、任何數字字面量、應用了一元-符號的數字字面量。

  1. 使用枚舉作爲類型。
enum ShapeKind {
	Circle, Square
}

interface Circle {
	kind: ShapeKind.Circle;
	radius: number
}

interface Square {
	kind: ShapeKind.Square;
	sideLength: number;
}

let c: Circle = {
	kind: ShapedKind.Square, // 報錯,因爲定義的Circle是指定了ShapeKind.Circle的值而不是ShapeKind.Square的值
	radius: 100
}

運行時的枚舉

枚舉也是一個對象。
例如:

enum E {
	X, Y, Z
}

function fn(obj: { X: number })

fn(E) // fn函數的類型檢測會通過 因爲E.X是numebr

反向映射

枚舉不僅提供了可以獲取枚舉的值,還可以通過賦值獲取枚舉的成員的名稱。
例如:

enum Enum {
	A
}
let a = Enum.A
let nameOfA = Enum[a] // 此時nameOfA爲A

const枚舉

即用 const 關鍵字聲明枚舉。
例如:

const enum A {
	A
}

外部枚舉

外部枚舉用於描述已存在的枚舉類型的形狀,而外部枚舉和內部枚舉的一個重要區別就是,在正常的枚舉裏,沒有初始化的成員會被當成常數成員,對於非常數的外部枚舉而言,沒有初始化方法時被當作需要計算的成員。
例如:

declare enum Enum {
	A = 1,
	B,
	C = 2
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章