📜  枚举值中的打字稿类型 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:40:22.236000             🧑  作者: Mango

枚举值中的打字稿类型 - TypeScript

在 TypeScript 中,枚举是一种数据类型,它为一组相关的常量赋予了友好的名字。枚举常量值是以一组递增的数字编号来表示的。 TypeScript 还添加了对字符串和数字枚举类型的支持。

本文将讨论 TypeScript 中枚举值中的打字稿类型。

字符串枚举
定义

字符串枚举是一种通过字符串值来表示常量的枚举类型。字符串枚举使用字符串常量或字面量来替代数字枚举中的数字常量或字面量。

下面是字符串枚举的一个例子:

enum MediaType {
  Image = "image",
  Video = "video",
  Audio = "audio",
}
使用

使用字符串枚举时,可以使用枚举值的字符串相等检查来判断等式。相对于数字枚举,字符串枚举具有更好的可读性和适用性。

下面是使用字符串枚举的一个例子:

function getMediaByType(type: MediaType): string {
  switch (type) {
    case MediaType.Audio:
      return "You have selected an audio file";
    case MediaType.Image:
      return "You have selected an image file";
    case MediaType.Video:
      return "You have selected a video file";
    default:
      return "Invalid media type selected";
  }
}

console.log(getMediaByType(MediaType.Audio)); // You have selected an audio file
console.log(getMediaByType(MediaType.Video)); // You have selected a video file
console.log(getMediaByType("audio")); // Error: Argument of type '"audio"' is not assignable to parameter of type 'MediaType'.ts(2345)
数字枚举
定义

数字枚举是一种使用数字值来表示常量的枚举类型。数字枚举使用数字常量或字面量来替代字符串枚举中的字符串常量或字面量。

下面是数字枚举的一个例子:

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

使用数字枚举时,可以使用枚举值的数字相等检查来判断等式。相对于字符串枚举,数字枚举更适合表示具有明显顺序的常量。

下面是使用数字枚举的一个例子:

function getNextDirection(currentDirection: Direction): Direction {
  switch (currentDirection) {
    case Direction.Up:
      return Direction.Right;
    case Direction.Right:
      return Direction.Down;
    case Direction.Down:
      return Direction.Left;
    case Direction.Left:
      return Direction.Up;
    default:
      return Direction.Up;
  }
}

console.log(getNextDirection(Direction.Up)); // 2
console.log(getNextDirection(Direction.Right)); // 3
console.log(getNextDirection(Direction.Left)); // 1
console.log(getNextDirection("up")); // Error: Argument of type '"up"' is not assignable to parameter of type 'Direction'.ts(2345)
常量枚举
定义

常量枚举是一种在编译阶段被删除的枚举类型。它被定义为 const enum,这意味着常量枚举中的常量值会在使用时被直接替换。

下面是常量枚举的一个例子:

const enum Animal {
  Dog,
  Cat,
  Fish,
}
使用

使用常量枚举时,常量值会在编译阶段被直接替换,所以常量枚举不能包含计算所得的成员。

下面是使用常量枚举的一个例子:

function getAnimalName(animal: Animal): string {
  switch (animal) {
    case Animal.Dog:
      return "Dog";
    case Animal.Cat:
      return "Cat";
    case Animal.Fish:
      return "Fish";
    default:
      return "Unknown animal";
  }
}

console.log(getAnimalName(Animal.Dog)); // Dog
console.log(getAnimalName(Animal.Cat)); // Cat
console.log(getAnimalName(0)); // Unknown animal
枚举成员类型
值赋值为常量值

在枚举中,可以将成员的值赋予一个常量值。枚举成员值可以是一个表达式,但它必须是常量表达式。

下面是将成员值赋予常量值的一个例子:

enum Fruit {
  Apple = 1,
  Banana = Apple * 2,
  Orange = Banana + 2,
}
值赋值为字符串

在枚举中,可以将成员的值赋予一个字符串。字符串枚举在使用时具有更好的可读性。

下面是将成员值赋予字符串的一个例子:

enum Status {
  InProgress = "in-progress",
  Failed = "failed",
  Completed = "completed",
}
结论

本文介绍了 TypeScript 中枚举值中的打字稿类型,包括字符串枚举、数字枚举、常量枚举和枚举成员类型。使用枚举可以使代码更加具有可读性和可维护性。枚举的适用场景是需要表示一组相关的常量且这些常量有固定的名称行不变色。