当前位置: 代码迷 >> 综合 >> TypeScript -- 第七节 枚举
  详细解决方案

TypeScript -- 第七节 枚举

热度:54   发布时间:2023-11-23 07:23:45.0
/* * 枚举 enumeration(enum),枚举(Enum)类型用于取值被限定在一定范围内的场景。 * 使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。 * TypeScript支持数字的和基于字符串的枚举。 * * *///数字枚举
enum NumDirection {
    Up = 1,//不初始化,默认从0开始Down,Left,Right
}
//使用枚举很简单:通过枚举的属性来访问枚举成员,和枚举的名字来访问枚举类型
console.log(NumDirection);//通过枚举的名字来访问枚举类型
console.log(NumDirection.Up);//通过枚举的属性来访问枚举成员// 字符串枚举
//在字符串枚举里,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。
enum EnumString{
    Up = "UP",Down = "DOWN",Left = "LEFT",Right = "RIGHT",
}
console.log(EnumString);//通过枚举的名字来访问枚举类型
console.log(EnumString.Up)//通过枚举的属性来访问枚举成员//异构枚举(Heterogeneous enums)
//不建议创建混合数据类型的枚举 示例如下:
enum BooleanLikeHeterogeneousEnum {
    No = 0,Yes = "YES",
}//枚举项有两种类型:常数项(constant member)和计算所得项(computed member)
//枚举--常量
//1.它是枚举的第一个成员且没有初始化器,这种情况下它被赋予值 0:
// E.X is constant:
enum E {
     X }
//2.它不带有初始化器且它之前的枚举成员是一个 数字常量。
// 这种情况下,当前枚举成员的值为它上一个枚举成员的值加1。
// All enum members in 'E1' and 'E2' are constant.enum E1 {
     X, Y, Z }enum E2 {
    A = 1, B, C
}
/* * 3.枚举成员使用 常量枚举表达式初始化。 * 常数枚举表达式是TypeScript表达式的子集,它可以在编译阶段求值。 当一个表达式满足下面条件之一时,它就是一个常量枚举表达式:0. 一个枚举表达式字面量(主要是字符串字面量或数字字面量)1. 一个对之前定义的常量枚举成员的引用(可以是在不同的枚举类型中定义的)2.带括号的常量枚举表达式3.一元运算符 +, -, ~其中之一应用在了常量枚举表达式4.常量枚举表达式做为二元运算符 +, -, *, /, %, <<, >>, >>>, &, |, ^的操作对象。若常数枚举表达式求值后为 NaN或 Infinity,则会在编译阶段报错。 * * */
enum FileAccess {
    // constant membersNone,Read    = 1 << 1,//左移运算符Write   = 1 << 2,ReadWrite  = Read | Write,//位运算符// computed memberG = "123".length,//计算所得项
}console.log(FileAccess.G)//联合枚举类型与枚举成员的类型
enum ShapeKind {
    Circle,Square,
}interface Circle {
    kind: ShapeKind.Circle;radius: number;
}interface Square {
    kind: ShapeKind.Square;sideLength: number;
}let c: Circle = {
    kind: ShapeKind.Circle,// kind: ShapeKind.Square,//报错// ~~~~~~~~~~~~~~~~ Error!radius: 100,
};
console.log(c.kind);//运行时的枚举
enum E3 {
    X, Y, Z
}
function f(obj: {
     X: number }) {
    return obj.X;
}
// Works, since 'E' has a property named 'X' which is a number.
console.log(f(E3));//反向映射
enum Enum {
    A
}
let a = Enum.A;
let nameOfA = Enum[a]; // "A"
console.log(Enum.A);//0
console.log(nameOfA);//"A"/* * const 常量枚举 * 常量枚举通过在枚举上使用 const修饰符来定义 * 常量枚举与普通枚举的区别是,它会在编译阶段被删除,并且不能包含计算成员。 * */
const enum EnumConst {
    A = 1,// B= 'abc'.length //常量枚举不允许包含计算成员。
}//外部枚举
// 此处必须使用const, 不然declare 定义的类型只会用于编译时的检查,编译结果中会被删除
declare const enum Directions {
    Up,Down,Left,Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right];
console.log(directions)> 吴哲:平常心,平常心!--《士兵突击》
  相关解决方案