【基础学习笔记 enum】TypeScript 中的 enum 枚举类型介绍

因为之前网上查好多博客都是只说最基础的,所以这里记录一下,最基础的放在最后面。

这里重点要记录的是枚举成员的值可以是字符串(字符串枚举,因为网上大部分只介绍常数枚举),需要注意的一点是,和数字值不同:字符串枚举没有自增长的行为,枚举成员必须设置初始值。

字符串枚举

默认情况下,枚举成员的值是数字,但你也可以使用字符串或混合值作为枚举成员的值。比如:

复制代码
enum ErrorCode {
  NotFound = "404",
  ServerError = "500",
  Unauthorized = "401"
}

console.log(ErrorCode.NotFound);  // 输出: "404"

常数枚举

常数枚举在编译时会被移除,只保留枚举成员的值。这可以减少编译后的代码量,适用于一些只需要值而不需要名称的情况。比如:

复制代码
const enum Size {
  Small = "S",
  Medium = "M",
  Large = "L"
}

let selectedSize: Size = Size.Medium;
console.log(selectedSize);  // 输出: "M"

指定枚举成员的值

在枚举成员后可以显式指定其值,未指定的情况下会默认递增。比如:

复制代码
enum LogLevel {
  Error = 1,
  Warn,
  Info,
  Debug
}

let currentLogLevel: LogLevel = LogLevel.Info;
console.log(currentLogLevel);  // 输出: 3

反向映射

枚举类型在编译为 JavaScript 时会生成双向映射,可以通过枚举成员的名称获取对应的值,也可以通过值获取对应的枚举成员。比如:

复制代码
enum Weekday {
  Sunday,
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday
}

console.log(Weekday.Sunday);  // 输出: 0
console.log(Weekday[0]);      // 输出: "Sunday"

枚举作为类型

枚举类型本身可以作为类型来使用,用于约束变量的取值范围。比如:

复制代码
enum Gender {
  Male,
  Female
}

interface Person {
  name: string;
  age: number;
  gender: Gender;
}

let person: Person = {
  name: "Alice",
  age: 30,
  gender: Gender.Female
};

基本用法

基本用法如下:

复制代码
enum Direction {
  Up,
  Down,
  Left,
  Right
}

let userDirection: Direction = Direction.Left;
console.log(userDirection);  // 输出: 2

述代码中,Direction 枚举类型定义了四个成员:Up、Down、Left 和 Right。每个成员都会被分配一个默认的数字值,从 0 开始递增。在定义枚举变量时,可以直接使用成员名称进行赋值。

由于对enum类型用的不多,所以记录一下学习。

网上关于enum类型的说明都差不多,无非是定义的枚举成员的默认值从零开始递增,如果指定了数值就从指定的数值开始递增。在使用枚举类型时,可以像使用普通类型一样声明变量并赋予其枚举值。

在 TypeScript 中,可以使用 enum 关键字来定义枚举类型(enumeration types)。枚举类型用于定义一组命名的常量值,使代码更加可读性强、维护性高。枚举(Enum)类型用于取值被限定在一定范围内的场景,比如性别只有男和女,某个机构的部门只有固定几个(不考虑部门整编重组的情况下)。

基本用法是枚举类型的每个成员都会被分配一个默认的数字值,从 0 开始递增。在定义枚举变量时,可以直接使用成员名称进行赋值。

希望本文对您有所帮助,也希望路过的大佬不吝赐教!

相关推荐
Bolt19 小时前
TypeScript 7.0 来了:当 tsc 用 Go 重写之后
javascript·typescript·go
Flynt1 天前
装上TypeScript 7.0 RC之后,最让我意外不是10倍提速
typescript·visual studio code
疯狂SQL1 天前
手写高性能在线 JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
typescript·json·next.js·web worker·前端性能优化·esbuild·源码实战
LinXunFeng2 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
Momo__5 天前
TypeScript NoInfer<T>——精准控制泛型推断的工具类型
前端·typescript
通信小呆呆6 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick6 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee6 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn866 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e6 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统