TS入门-枚举

298 阅读2分钟

基础定义

  • 枚举属于类型
enum Sex {
  Man, // 末尾带逗号分隔
  Women
}

数字枚举

  • 数字枚举,根据初始化值,自增设置属性值
  • 初始化值可选,默认为 0
enum Status{
  success = 0, 
  fail
}
console.log(Status[0], Status.success)

字符枚举

  • 字符枚举没有自增行为,所以需要为每一属性设置值
enum Status{
  success = 'success'
  fail = 'fail'
}

常量成员

  • 第一成员没有初始化器
enum E { X } // x 不到初始化器
  • 它不带有初始化器且它之前的枚举成员是一个 数字常量
enum E { A = 1, B }  // B 不带初始化器且之前的枚举成员是数字

常量枚举表达式

满足一下条件之一的表达式,其枚举值为常量成员

  • 一个枚举表达式字面量(主要是字符串字面量或数字字面量)
  • 一个对之前定义的常量枚举成员的引用(可以是在不同的枚举类型中定义的)
  • 带括号的常量枚举表达式
  • 一元运算符 +, -, ~其中之一应用在了常量枚举表达式
  • 常量枚举表达式做为二元运算符 +, -, *, /, %, <<, >>, >>>, &, |, ^的操作对象。 若常数枚举表达式求值后为 NaN或 Infinity,则会在编译阶段报错。

枚举成员类型

  • 不带有初始值的常量枚举成员
  • 任何字符串字面量(例如: "foo", "bar", "baz")
  • 任何数字字面量(例如: 1, 100)
  • 应用了一元 -符号的数字字面量(例如: -1, -100)
enum ShapeKind {
    Circle,
    Square,
}
// 使用枚举成员作为类型定义
interface Circle {
    kind: ShapeKind.Circle;
    radius: number;
}


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


let c: Circle = {
    kind: ShapeKind.Square,
    //    ~~~~~~~~~~~~~~~~ Error!
    radius: 100,
}

const 枚举

const enum Enum {
    A = 1,
    B = A * 2
}

外部枚举

外部枚举用来描述已经存在的枚举类型的形状

declare enum Enum {
    A = 1,
    B,
    C = 2
}