typescript 强制类型-TypeScript中枚举类型的理解及应用场景

// 声明d为枚举类型Direction
let d: Direction;

类型可分为:

数值枚举

当我们声明枚举类型时,虽然没有给出形参,但它们的值显然是默认的数值类型,并且默认是从0开始依次累加:

enum Direction {
    Up,   // 值默认为 0
    Down, // 值默认为 1
    Left, // 值默认为 2
    Right // 值默认为 3
}
console.log(Direction.Up === 0); // true
console.log(Direction.Down === 1); // true
console.log(Direction.Left === 2); // true
console.log(Direction.Right === 3); // true

如果我们使用第一个值作为形参,后面的值也会根据前一个值加1:

enum Direction {
    Up = 10,
    Down,
    Left,
    Right
}
console.log(Direction.Up, Direction.Down, Direction.Left, Direction.Right); // 10 11 12 13

字符串枚举

虽然枚举类型的值也可以是字符串类型:

enum Direction {
    Up = 'Up',
    Down = 'Down',
    Left = 'Left',
    Right = 'Right'
}
console.log(Direction['Right'], Direction.Up); // Right Up

如果一个变量设置为字符串,后面的数组也需要形参字符串,否则会报错:

enum Direction {
 Up = 'UP',
 Down, // error TS1061: Enum member must have initializer
 Left, // error TS1061: Enum member must have initializer
 Right // error TS1061: Enum member must have initializer
}

强制类型转换_强制类型转换C语言_typescript 强制类型

异构枚举

也就是说,将数字枚举和字符串枚举结合起来,混合在一起,如下:

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

通常我们很少使用异构枚举

自然

现在一个枚举案例如下:

enum Direction {
    Up,
    Down,
    Left,
    Right
}

编译后的javascript如下:

var Direction;
(function (Direction) {
    Direction[Direction["Up"] = 0] = "Up";
    Direction[Direction["Down"] = 1] = "Down";
    Direction[Direction["Left"] = 2] = "Left";
    Direction[Direction["Right"] = 3] = "Right";
})(Direction || (Direction = {}));

从上面的代码可以看出typescript 强制类型,Direction[Direction["Up"] = 0] = "Up" 可以分为

所以定义了枚举类型后,可以通过正负映射得到对应的值,如下:

enum Direction {
    Up,
    Down,
    Left,
    Right
}
console.log(Direction.Up === 0); // true
console.log(Direction[0]); // Up

并且在多个地方定义的枚举可以合并typescript 强制类型,如下:

enum Direction {
    Up = 'Up',
    Down = 'Down',
    Left = 'Left',
    Right = 'Right'
}
enum Direction {
    Center = 1
}

编译后js代码如下:

var Direction;
(function (Direction) {
    Direction["Up"] = "Up";
    Direction["Down"] = "Down";
    Direction["Left"] = "Left";
    Direction["Right"] = "Right";
})(Direction || (Direction = {}));
(function (Direction) {
    Direction[Direction["Center"] = 1] = "Center";
})(Direction || (Direction = {}));

可以看到,Direction对象属性是叠加的

3、应用场景

typescript 强制类型_强制类型转换C语言_强制类型转换

以获取生命为例,后端返回的数组使用0-6来标记对应的日期。 这时可以使用枚举来增强代码的可读性,如下:

enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
console.log(Days["Sun"] === 0); // true
console.log(Days["Mon"] === 1); // true
console.log(Days["Tue"] === 2); // true
console.log(Days["Sat"] === 6); // true

包括前端日常返回0、1等状态时,我们可以通过枚举来定义,这样可以增强代码的可读性,方便后续维护

参考

%E6%9E%9A%E4%B8%BE

总结

关于TypeScript中枚举类型的理解和应用场景这篇文章就到此结束了。 关于TypeScript枚举类型的更多信息,请搜索自学编程网之前的文章或者继续浏览下面的相关文章。 希望你以后能学到更多。 支持网络自学编程!