fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[TypeScript] 第1500天 请说说你对TypeScript中枚举的理解

Open haizhilin2013 opened this issue 2 years ago • 1 comments
trafficstars

第1500天 请说说你对TypeScript中枚举的理解

3+1官网

我也要出题

haizhilin2013 avatar May 24 '23 20:05 haizhilin2013

在 TypeScript 中,枚举(Enum)是一种用于定义一组命名常量的类型。它可以让你定义一组有意义的名称,这些名称映射到一组数值,从而提高代码的可读性和可维护性。枚举提供了一种方便的方法来表示一组相关的值,例如一周的天数、颜色、状态等。

定义枚举

TypeScript 提供了两种类型的枚举:数字枚举和字符串枚举。

数字枚举

数字枚举是最常见的枚举类型。默认情况下,第一个枚举成员的值是 0,后续成员的值依次递增。

enum Direction {
    Up,
    Down,
    Left,
    Right
}

let dir: Direction = Direction.Up;
console.log(dir); // 输出 0

你也可以手动为枚举成员指定初始值,其余成员的值将从该初始值开始递增。

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

console.log(Direction.Down); // 输出 2

字符串枚举

字符串枚举是一个枚举类型,其中每个成员都拥有一个字符串值。这在需要描述性的枚举值时非常有用。

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

let dir: Direction = Direction.Left;
console.log(dir); // 输出 "LEFT"

反向映射

对于数字枚举,TypeScript 支持反向映射。可以通过枚举的值来获取对应的名称。

enum Direction {
    Up,
    Down,
    Left,
    Right
}

console.log(Direction[0]); // 输出 "Up"
console.log(Direction[Direction.Up]); // 输出 "Up"

常量枚举

常量枚举使用 const 关键字声明,编译后不会生成额外的代码,只会内联枚举值。它在性能优化和减少代码量方面非常有用。

const enum Direction {
    Up,
    Down,
    Left,
    Right
}

let dir: Direction = Direction.Up;
console.log(dir); // 输出 0

异构枚举

异构枚举是指枚举中包含不同类型的值(数字和字符串)。

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

枚举的用途

  1. 代码可读性:使用枚举可以使代码更加直观和易读。
  2. 减少错误:枚举可以避免使用魔法数或字符串,从而减少错误。
  3. 类型检查:枚举提供了一种类型安全的方式来处理一组相关的常量值。

使用枚举的注意事项

  • 枚举成员默认是可以被更改的,如果需要不可变,可以使用 const 枚举。
  • 字符串枚举在运行时会生成更多代码,但它们提供了更好的可读性和调试体验。

示例

以下是一个使用枚举来表示不同日志级别的示例:

enum LogLevel {
    ERROR = "ERROR",
    WARN = "WARN",
    INFO = "INFO",
    DEBUG = "DEBUG"
}

function logMessage(level: LogLevel, message: string) {
    console.log(`[${level}] - ${message}`);
}

logMessage(LogLevel.INFO, "This is an informational message."); // 输出 [INFO] - This is an informational message.

综上所述,枚举是 TypeScript 中非常有用的一种类型,提供了一种简洁明了的方法来定义一组相关常量。它不仅提高了代码的可读性和维护性,还提供了类型安全的保障。

llccing avatar Jun 28 '24 08:06 llccing