TypeScript学习笔记-枚举

868 阅读1分钟

枚举

// enum关键字,使用枚举可以定义一些有名字的数字常量
// 枚举类型可以包含零个或多个枚举成员,可以是 常数或是计算得出的值
// 枚举成员的值为上一个枚举成员的值加1,第一个枚举元素没有初始化方法,那么它的初始值为 0
enum Direction {
	UP = 1,
	DOWN,  // 2
	LEFT,  // 3
	RIGHT,  // 4
}

enum FileAccess {  // 使用表达式
	None,  // 0
	Read = 1 << 1,  // 2
	Write = 1 << 2,  // 4
	ReadWrite = Read | Write,
	G = '123'.length
}

// 枚举是在运行时真正存在的一个对象,它包含双向映射(name -> value)和(value -> name),
// Enum[Enum["A"] = 0] = "A" : Enum = {0: "A", A: 0}
console.log(FileAccess);
console.log(FileAccess.G);  // 枚举使用

常数枚举

// 为了避免生成多余的代码和间接引用,可以使用常数枚举
const enum Enum {
	A = 1,
	B = A * 2,
}
//console.log(Enum);  // 'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment.
console.log(Enum.B);  // 常数枚举只能使用常数枚举表达式,它们在编译阶段会被删除, 编译后是console.log(2 /* B */);

外部枚举

// 外部枚举
// 描述已经存在的枚举类型的形状
// 外部枚举和非外部枚举之间有一个重要的区别,在正常的枚举里,没有初始化方法的成员被当成常数成员。 
// 对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。
declare enum Enum {  // 测试不通 
	A = 10,
	B,
	C = 12,
}