玩转TypeScript枚举

前言


😎在我们来详细介绍枚举前,不如先从编程世界的整体上来了解下枚举,我们首先看下其他语言的枚举类型,虽然在JS中没有枚举类型,但是在其他编程语言里面其实早就是老朋友了,我们先看下C#Java中的枚举的使用方法。在 C# 中,枚举类型使用 enum 关键字来定义。与 TypeScript 类似,C# 的枚举类型也允许为一组相关的常量值分配名称。C# 的枚举类型默认基于整数,并且可以手动指定每个常量值的整数值或使用隐式递增。以下是一个示例:

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

在 Java 中,枚举类型使用 enum 关键字来定义。Java 的枚举类型与 TypeScript 的枚举类型类似,允许为一组相关的常量值分配名称。Java 的枚举类型可以包含方法、字段和构造函数。以下是一个示例:

js 复制代码
enum Size {
    SMALL,
    MEDIUM,
    LARGE
}

🫥其实在TypeScript中的使用方法和写法和C#中的写法一模一样,我们来看下在TypeScript中枚举写法

js 复制代码
enum Person{
  WOMAN,
  MAN
}

二.枚举的用法汇总


🤗关于枚举的用法我会从上面四个部分进行拆分介绍,具体分为普通枚举 枚举延迟求值 数字枚举 字符枚举 枚举扩展等几个方面展开。

三.常量枚举(普通枚举)


🫥上述图中并没有标注常量枚举,因为它是枚举中最普通的用法,所以我比较喜欢称之为普通枚举,普通枚举的使用方法非常的简单,下边例子我们写了一个关于人的枚举,枚举的取值方式和JS中对象的取值方式一样,但是不同点在于枚举可以双向映射简而言之就是,通过key可以获得value通过value可以获得key,具体转为JS的细节我们不需要去了解,我们就把TS当作一门类似于C#的语言来学习就好。

js 复制代码
enum Person{
    RIBEN,
    MEIGUO,
    YINGGUO,
}
console.log(Person[0])
console.log(Person.RIBEN)

四.数字枚举与字符枚举


🥱我们对上面的那个枚举进行修改,为后两个枚举分别添加上数字和字符串的值,并且在TS中枚举的值只能是数字或者字符串。

js 复制代码
enum Person{
    YINGGUO,
    RIBEN = 599,
    MEIGUO = "En",
}

既然看到这里不妨我们来解决一个报错,报错内容如下所示,普通枚举放到最后为什么报错了?我们思考一下,普通枚举在通过keyvalue值的时候取到的值是下标,那么如果把它放在字符串枚举的后边它该如何取值?所以我们可以参考下面的运行结果来解决,解决的办法就是要把这个普通的枚举放在字符串枚举值的上边。

🫥总结一下就是,数字枚举就是一种特殊的普通枚举,只不过是自己限定了值,这样的话其实就很清楚了,枚举分为两类:普通枚举 字符枚举

五.延迟求值枚举


😎延迟求值枚举就是,值先不确定,在使用的时候再进行计算,可以简单理解为懒加载相关的内容,我们可以看下这个例子,我们依然要注意上方那种报错的问题。

js 复制代码
const sum = ()=> 45 + 34

enum Num{
    ONE = sum(),
    THREE = 455,
    TWO,
}
console.log(Num.ONE) // 79
console.log(Num.TWO) // 455
console.log(Num.THREE) // 456

六.枚举扩展


🫥假设你正在开发一个音乐播放器应用程序。请定义一个枚举类型 MusicGenre,包含以下音乐风格的成员:

Pop Rock HipHop Jazz EDM,然后,请定义一个函数 getSongRecommendation,该函数接受一个 MusicGenre 类型的参数,并根据传入的音乐风格返回一个对应的歌曲推荐。

  1. getSongRecommendation 函数的返回类型为字符串。
  2. 如果传入的音乐风格是 Pop,则返回 "Dance Monkey"。
  3. 如果传入的音乐风格是 Rock,则返回 "Bohemian Rhapsody"。
  4. 如果传入的音乐风格是 HipHop,则返回 "Lose Yourself"。
  5. 如果传入的音乐风格是 Jazz,则返回 "Take Five"。
  6. 如果传入的音乐风格是 EDM,则返回 "Wake Me Up".

你需要完成的部分是定义枚举类型和编写 getSongRecommendation 函数的实现。

js 复制代码
enum MusicGenre {
  // 在这里定义音乐风格的枚举成员
}

function getSongRecommendation(genre: MusicGenre): string {
  // 在这里根据传入的音乐风格返回对应的歌曲推荐
}

// 测试代码
const popSong = getSongRecommendation(MusicGenre.Pop);
console.log(popSong); // 应该输出 "Dance Monkey"
js 复制代码
enum MusicGenre {
    Pop = "Dance Monkey",
    Rock = "Bohemian Rhapsody",
    HipHop = "Lose Yourself",
    Jazz = "Take Five",
    EDM = "Wake Me Up",
}
function getSongRecommendation(genre: MusicGenre): string {
return genre
}
getSongRecommendation(MusicGenre.Pop)
console.log(getSongRecommendation(MusicGenre.Pop));
相关推荐
CodeSheep8 分钟前
OpenJDK 全面禁止 AI 生成代码!
前端·后端·程序员
IT_陈寒36 分钟前
为什么我的Vue组件总是莫名其妙重渲染?
前端·人工智能·后端
乘风gg1 小时前
企业级 AI Coding 的 Harness 工程实战:8 个 Skill 串起全链路
前端·ai编程·claude
染指11103 小时前
103.RAG-LLamaIndex后端rag问答-聊天接口
前端·javascript·vue.js·人工智能
东风破_10 小时前
danci 项目(三):从 JSON 数据到 AI Coding,真实项目里的数据清洗、Prompt 和工程规范
前端·后端·node.js
东风破_10 小时前
danci 项目(一):从需求到架构,一个单词学习系统为什么会这样设计
前端·后端·node.js
蒲公英eric10 小时前
从客户端到服务端:DVWA DOM 型 XSS 模块完整漏洞分析教程
前端·web安全·ai·xss·dvwa·ai安全
单线程_0111 小时前
从案例分析 Vue3 Tokenizer+Parser 源码三
前端·javascript·vue.js
顶点多余11 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
Setsuna_F_Seiei11 小时前
前端转型 Agent 开发 03 之 Agent Tools - 给 Agent 装上手脚
前端·agent·ai编程