TypeScript枚举类型

目录
  • 1.概述
  • 2.数字枚举
    • 2.1反向映射
  • 3.字符串枚举
  • 4.const枚举
  • 5.总结

1.概述

所谓的枚举类型就是为一组数值赋予名字。

enum类型在C++、Java语言中比较常见,TypeScriptJavaScript原有的类型基础上也增加了enum类型。

比如我们需要定义一组角色,需要使用数字表示,就可以使用如下代码定位:

enum role{
    STUDENT,
    TEACHER,
    ADMIN
}

上面代码中我们定义了role为一个枚举类型,这个里面有是三个值,TypeScript会为每个值自动的分配序号,默认从0开始依次排列,它们的值依次为0 1 2。

当然我们也可以自定义每个值,如果非全部定义则后面的值会根据前面的值自增。

示例代码如下:

enum role1 {
    student = 1,
    // 后面两个值依次为2 3
    teacher,
    admin,
}
enum role2 {
    // 每个名具有指定的值
    student = 1,
    teacher = 3,
    admin = 6,
}

2.数字枚举

我们上面介绍的例子就是数字枚举类型,但是还有一个注意点就是如果某个字段使用了常量或者计算后的值 ,我们就必须设置紧跟着字段的初始值 ,否则将会抛出异常。

示例代码如下:

;(function () {
  // 定义一个函数
  const getValue: () => number = (): number => {
    return 0
  }

  enum role1 {
    student = getValue(),
    // teacher, // error 枚举成员必须具有初始化表达式。
    // admin, // error 枚举成员必须具有初始化表达式。
  }
  const TEACHER_ROLE: number = 3
  // 每个名具有指定的值
  enum role2 {
    student,
    teacher = TEACHER_ROLE,
    // admin, // error 枚举成员必须具有初始化表达式。
  }
})()

2.1反向映射

所谓的反向映射就是可以通过key访问到value,通过value访问到key。

我们可以通过.名称或者['名称']的方式取到每个具体的值,也可以通过[数值]的方式取到每个数值对应的名称,

示例代码如下:

enum role {
    student,
    teacher,
    admin,
}
console.log(role.admin) // 2
console.log(role['teacher']) //1
console.log(role[0]) //‘student'

其实TypeScript中的枚举类型编译成JavaScript代码之后就是一个对象,我们将上面那个枚举类型编译一下,

编译后的代码如下:

"use strict";
var role;
(function (role) {
    role[role["student"] = 0] = "student";
    role[role["teacher"] = 1] = "teacher";
    role[role["admin"] = 2] = "admin";
})(role || (role = {}));

这样看我们可能好理解,其实就是通过一个自调函数将值赋值给role对象,赋值之后如下:

var role = {
    "student": 0,
    "teacher": 1,
    "admin"  : 2,
    0: "student",
    1: "teacher",
    2: "admin",
}

值得注意的是 反向映射仅仅支持在数字枚举 中,不支持在2.4版本中新增的字符串枚举 中。

3.字符串枚举

所谓的字符串枚举就是枚举中的每个字段的值必须都是字符串,或者是枚举中的其他字段,

示例代码如下:

enum Person {
  name = '一碗周',
  hobby = 'coding',
  // 设置枚举中的字段作为值
  myName = name,
}
console.log(Person.name, Person.myName) // 一碗周 一碗周

4.const枚举

在我们定义了普通枚举之后,被编译成JavaScript代码之后会创建一个对应的对象,如果使用枚举是增了增加程序的可读性,且并不需要编译之后的对象。在TypeScript1.4中增加了const枚举。

const枚举被翻译为完全嵌入枚举 ,所谓的完全嵌入枚举就是编译之后没有对应的对象,只是从枚举中拿到对应你的值然后进行替换。定义const枚举只需要在普通枚举前面加上const关键字。

示例代码如下:

const enum role {
    student,
    teacher,
    admin,
}
let admin = role.admin

如上代码会被编译为如下:

let admin = 2 /* admin */;

5.总结

这篇文章介绍了两种基本的枚举类型:数字枚举 和字符串枚举 ,数组枚举还有一个反射映射的概念,就是可以通过key访问value,通过value可以访问key;最后我们还介绍了const枚举,就是编译后不生成所谓的枚举对象。

到此这篇关于TypeScript枚举类型的文章就介绍到这了,更多相关TypeScript枚举 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • TypeScript中枚举类型的理解与应用场景

    目录 一.是什么 二.使用 数字枚举 字符串枚举 异构枚举 本质 三.应用场景 总结 一.是什么 枚举是一个被命名的整型常数的集合,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型 通俗来说,枚举就是一个对象的所有可能取值的集合 在日常生活中也很常见,例如表示星期的SUNDAY.MONDAY.TUESDAY.WEDNESDAY.THURSDAY.FRIDAY.SATURDAY就可以看成是一个枚举 枚举的说明与结构和联合相似,其形式为: enum 枚举名{     标识

  • 详解 TypeScript 枚举类型

    目录 1. 数字枚举 2. 字符串枚举 3. 反向映射 4. 异构枚举 5. 常量枚举 6. 枚举成员类型和联合枚举类型 (1)枚举成员类型 (2)联合枚举类型 7. 枚举合并 前言: TypeScript 在 ES 原有类型基础上加入枚举类型,使得在 TypeScript 中也可以给一组数值赋予名字,这样对开发者比较友好,可以理解枚举就是一个字典. 枚举类型使用enum来定义: enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, F

  • TypeScript枚举类型

    目录 1.概述 2.数字枚举 2.1反向映射 3.字符串枚举 4.const枚举 5.总结 1.概述 所谓的枚举类型就是为一组数值赋予名字. enum类型在C++.Java语言中比较常见,TypeScript在JavaScript原有的类型基础上也增加了enum类型. 比如我们需要定义一组角色,需要使用数字表示,就可以使用如下代码定位: enum role{ STUDENT, TEACHER, ADMIN } 上面代码中我们定义了role为一个枚举类型,这个里面有是三个值,TypeScript会

  • 详解TypeScript映射类型和更好的字面量类型推断

    概述 TypeScript 2.1 引入了映射类型,这是对类型系统的一个强大的补充.本质上,映射类型允许w咱们通过映射属性类型从现有类型创建新类型.根据咱们指定的规则转换现有类型的每个属性.转换后的属性组成新的类型. 使用映射类型,可以捕获类型系统中类似Object.freeze()等方法的效果.冻结对象后,就不能再添加.更改或删除其中的属性.来看看如何在不使用映射类型的情况下在类型系统中对其进行编码: interface Point { x: number; y: number; } inte

  • TypeScript枚举的基础知识及实例

    目录 前言 TypeScript 中的枚举是什么 在 TypeScript 中使用枚举需要注意什么 常见枚举的类型 枚举反向映射 计算枚举 总结 前言 枚举是受 TypeScript 支持的数据类型.枚举允许您定义一组命名常量.使用它们可以更轻松地记录意图或创建一组不同的案例.枚举大多数用于面向对象的编程语言(如 Java 和 C#)中,现在也可以 TypeScript 中使用.它们是 TypeScript 的少数功能之一,它不是 JavaScript 的类型级扩展.接下来我将要演示 TypeS

  • TypeScript基础类型介绍

    目录 1.基础类型 2.对象类型 2.1数组 2.2元组 2.3对象 3.类型推断 3.1类型联合中的类型推断 3.2上下文类型 4.类型断言 TS 的静态类型可以人为的分为两类: 基础类型:像布尔值(boolean).数字(number).字符串(string).Any(任意类型).Void(无类型).Null. Undefined.Never(无值类型) 对象类型:像数组.函数.对象.枚举.元组. 1.基础类型 TS的类型定义主要通过以下示例代码中演示的方式进行定义: ;(function

  • 你需要知道的TypeScript高级类型总结

    目录 1. 字面量类型 (1)字符串字面量类型 (2)数字字面量类型 (3)布尔字面量类型 (4)模板字面量类型 2. 联合类型 (1)基本使用 (2)限制 (3)可辨识联合类型 3. 交叉类型 (1)基本实用 (2)使用场景 4. 索引类型 (1)索引类型查询操作符 (2)索引访问操作符 (3)应用 5. 条件类型 (1)基本概念 (2)创建自定义条件类型 (3)条件类型的类型推断 6. 类型推断 (1)基础类型 (2)多类型联合 (3)上下文类型 7. 类型保护 (1)instanceof

  • typescript中高级类型Record详解

    ts文档上对Record的介绍不多,但却经常用到,Record是一个很好用的工具类型.他会将一个类型的所有属性值都映射到另一个类型上并创造一个新的类型,先看下Record的源码. /** * Construct a type with a set of properties K of type T */ type Record<K extends keyof any, T> = { [P in K]: T; }; 好像源码也比较简单,即将K中的每个属性([P in K]),都转为T类型.常用的

  • TypeScript基本类型之typeof和keyof详解

    目录 编译并运行 TS 代码 TypeScript基础 数组类型   [] 联合类型  | 类型别名 函数类型 void类型 可选参数 ? 参数默认值= 对象类型 :object interface 元组类型 类型推论 类型断言  as 或者 <>泛型 typeof keyof any和unknow的区别 函数重载 总结 安装编译ts的工具 安装命令:npm i -g typescript 或者 yarn global add typescript. 验证是否安装成功:tsc –v(查看 Ty

  • Swift教程之枚举类型详解

    枚举定义了一个常用的具有相关性的一组数据,并在你的代码中以一个安全的方式使用它们. 如果你熟悉C语言,你就会知道,C语言中的枚举指定相关名称为一组整数值.在Swift中枚举更为灵活,不必为枚举的每个成员提供一个值.如果一个值(被称为"原始"的值)被提供给每个枚举成员,则该值可以是一个字符串,一个字符,或者任何整数或浮点类型的值. 另外,枚举成员可以指定任何类型,每个成员都可以存储的不同的相关值,就像其他语言中使用集合或变体.你还可以定义一组通用的相关成员为一个枚举,每一种都有不同的一组

随机推荐