下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 06 | 枚举类型
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

TypeScript开发实战

共47讲 · 约450分钟
2974
免费
01 | 重塑“类型思维”
免费
02 | 类型基础(1):强类型与...
免费
03 | 类型基础(2):动态类型...
免费
04 | 编写你的第一个TypeScrip...
免费
05 | 基本类型
06 | 枚举类型
07 | 接口(1):对象类型接口
08 | 接口(2):函数类型接口
09 | 函数相关知识点梳理
10 | 类(1):继承和成员修饰...
11 | 类(2):抽象类与多态
12 | 类与接口的关系
13 | 泛型(1):泛型函数与泛...
14 | 泛型(2):泛型类与泛型...
15 | 类型检查机制(1):类型...
16 | 类型检查机制(2):类型...
17 | 类型检查机制(3):类型...
18 | 高级类型(1):交叉类型...
19 | 高级类型(2):索引类型
20 | 高级类型(3):映射类型
21 | 高级类型(4):条件类型
22 | ES6与CommonJS的模块系统
23 | 使用命名空间
24 | 理解声明合并
25 | 如何编写声明文件
26 | 配置tsconfig.json(1)...
27 | 配置tsconfig.json(2)...
28 | 配置tsconfig.json(3)...
29 | 编译工具:从ts-loader到...
30 | 代码检查工具:从TSLint到...
31 | 使用Jest进行单元测试
32 | 创建项目
33 | 组件与类型(1):函数组...
34 | 组件与类型(2):高阶组...
35 | 事件处理与数据请求
36 | 列表渲染与路由
37 | Redux与类型
38 | 搭建服务端开发环境
39 | 列表的CRUD
40 | 导出Excel
41 | 搭建Vue开发环境
42 | 组件封装
43 | 组件发布
44 | 共存策略
45 | 宽松策略
46 | 严格策略
47 | 结束语
本节摘要

精选留言(21)

  • 2019-07-28
    const enum ERole{
        'role1' = 1,
        'role2' = 2,
        'role3' = 3,
        'role4' = 4,
        'role5'=5
    }
    function initByRole(role) {
        switch (role) {
            case ERole.role1:
            case ERole.role2:
                // do sth
                break;
            case ERole.role3:
            case ERole.role4:
                // do sth
                break;
            case ERole.role5:
                //do sth
                break;
             default:
                //do sth

        }
    }
    展开
    3
  • 2019-08-04
    ```typescript
    const enum RoleEnum{
        Reporter = 1,
        Developer,
        Maintainer,
        Owner,
        Guest
    }

    function initByRole(role: RoleEnum) {
        if (role === RoleEnum.Reporter || role === RoleEnum.Developer) {
            // do sth
        } else if (role === RoleEnum.Maintainer || role === RoleEnum.Owner) {
            // do sth
        } else if (role === RoleEnum.Guest) {
            // do sth
        } else {
            // do sth
        }
    }
    ```
    展开
    2
  • 2019-07-23
    老师我想请问如果枚举类型是有名字的常量的集合的话,那么常量还是不能改变的,硬编码问题还是没有得到解决的吧?

    作者回复: 常量不能改变的意思是,不能通过代码改变常量的值,但你可以修改定义常量的文件,而代码无需修改。

    2
  • 2019-07-22
    老师,难道我每次写一个文件比如 enum.ts都要在配置文件中修改访问的文件,每次都要手动编译吗?老师能否教一下怎么配置?

    作者回复: 可以把新增文件在 index.ts中 import 进来,不用修改配置文件

    2
    1
  • 2019-07-21
    ```javascript
    enum POWER {
        OWNER = 1,
        SUPERADMIN,
        ADMIN,
        AGENT,
        VISITOR,
    }

    const grade: number = 3

    function initByRole(role: number) {
        if (role === POWER.OWNER || role === POWER.SUPERADMIN) {
            console.log('所有者和超级管理员权限')
        } else if (role === POWER.ADMIN || role === POWER.AGENT) {
            console.log('管理员和代理访问权限')
        } else if (role === POWER.VISITOR) {
            console.log('游客权限')
        } else {
            console.log('无权限访问')
        }
    }

    initByRole(grade)
    ```
    展开
    1
  • 2019-07-18
    ~~~
    ```
    enum Role{
        Reporter,
        Developer,
        Maintainer,
        Owner,
        Guest
    }

    function initByRole(role:Role){
        if(role===1||role==2){
            console.log("1,2")
        }else if(role==3||role==4){
            console.log('4,5')
        }else if(role===5){
            console.log(5)
        }else{
            console.log(9999)
        }
    }
    initByRole(Role.Developer);
    ```
    ~~~
    不知道是不是这样改
    展开

    作者回复: 仍然存在硬编码

    1
  • 2019-09-21
    这个 枚举跟 用js 定义个对象的作用差不多, 具体区别只是枚举是相互映射的吗

    作者回复: 枚举成员都是只读的,对象不是。

  • 2019-09-03
    let g1:message.success = "hello";会报错TS2322: Type '"hello"' is not assignable to type 'message.success'.
    let g2:Role.Developer = 12;这个就不报错,区别就是数字类型和字符串类型
    怎么回事呢?

    作者回复: 字符串枚举类型只能被赋值给自身;
    数字枚举类型与number类型相互兼容,可以相互赋值。

  • 2019-09-02
    老师我想问一下,枚举的使用场景是什么?比如简单的循环下拉框数组[{ label: '北京', value: 'beijing' }, {label:'上海',value:'shanghai'}],这么写合适还是用{beijing:'北京','shanghai':'上海'}更合适呢,求解答。

    作者回复: 枚举主要用来定义一些常量,比如请求URL、文本提示信息等等,这样方便记忆,减少硬编码,增加可读性。
    你的这个例子,数据一般只用在初始化下拉框的时候,在业务代码中不太可能引用到,不适合用枚举。

    举个枚举的例子:
    // const.ts
    export enum URL {
        GET_CITY = "/api/getCity"
    }

    // app.ts
    import { URL } from "./const"
    axios.get(URL.GET_CITY).then(function(resp) {
        // render city select
    }

    1
  • 枚举类型的反向映射有什么作用呢?

    作者回复: 反向映射使我们可以通过枚举成员的值得到枚举成员的名字,可用在需要显示名字的场景。

  • 2019-08-05
    指定枚举作为变量的类型是什么作用呢?是变量和枚举值要类型一样吗?

    作者回复: 指定变量为枚举类型,就可以直接使用枚举成员的名字(一般我们都会让其具有比较明显的字面含义),而不必去使用具体的值,防止硬编码。

  • 2019-07-28
    老师,请问一下,
    为什么 Computed values are not permitted in an enum with string valued members。
    例如:下面的代码, ‘X = 1+3’这一行 就会报那样的错误
    // 异构枚举
    enum Answer {
        N,
        Y = 'Yes',
        X = 1+3
    }
    展开

    作者回复: 官方文档并未找到这个语法规定,既然提示了,我们就记下吧:含有字符串成员的枚举不能含有计算值,况且异构枚举也不推荐使用。

  • 2019-07-27
    作业:
    enum Roler {
        Reporter='Reporter',
        Developer='Developer',
        Maintaimer='Maintaimer',
        Owner='Owner',
        Guest='Guest'
    }

    function fnRoler(role:Roler){
        if(role===Roler.Reporter || role===Roler.Developer){
            // to do
        }else if(role === Roler.Maintaimer || role === Roler.Owner){
            // to do
        }else if(role === Roler.Guest){
            // to do
        }else{
            // to do
        }
    }
    展开
  • 2019-07-27
    交作业~~
    enum Role {
      Reporter = 1,
      Developer,
      Maintainer,
      Owner,
      Guest
    }

    function initByRole(role: number) {
      if (role === Role.Developer || role === Role.Reporter) {
        console.log('you are developer or reporter');
      } else if (role === Role.Maintainer || role === Role.Owner) {
        console.log('you are maintainer or owner');
      } else if (role === Role.Reporter) {
        console.log('you are guest');
      } else {
        console.log('OH NO!!!')
      }
    }
    顺便想问一下老师:
    最后关于枚举类还是比较难以理解,请问它的主要使用场景是什么样的?
    展开

    作者回复: 主要用来定义一些常量,比如请求URL、文本提示信息、分类信息等等,这样方便记忆,减少硬编码,增加可读性。

    1
  • 2019-07-23
    enum Role {
      Reporter,
      Developer,
      Maintainer,
      Owner,
      Guest
    }

    function init(role: number) {
      console.log(Role[role]);
    }

    init(Role.Developer);
    init(Role.Maintainer);
    展开
  • 2019-07-22
    enum Role {
      Reporter,
      Developer,
      Maintainer,
      Owner,
      Guest
    }

    function init(role: number) {
      switch (role) {
        case Role.Reporter:
          console.log("Report:1");
          break;
        case Role.Developer:
          console.log("Developer:2");
          break;
        case Role.Maintainer:
          console.log("Maintainer:3");
          break;
        case Role.Owner:
          console.log("Owner:4");
          break;
        default:
          console.log("Guest:5");
          break;
      }
    }

    init(Role.Developer);
    展开
  • 2019-07-21
    你好,请问以下vscode和浏览器同框可以拖拽大小,你用的什么插件呢

    作者回复: 这是Mac的分屏功能

  • 2019-07-19
    enum Role {
        Report,
        Developer,
        Maintainer,
        Owner,
        Guest
    }
    function initByRole(role: Role): void {
        switch (Role[role]) {
            case Role[0]:
                console.log(role)
                break;
            case Role[1]:
                console.log(role)
                break;
            case Role[2]:
                console.log(role)
                break;
            case Role[3]:
                console.log(role)
                break;
            case Role[4]:
                console.log(role)
                break;
        }
    }
    initByRole(Role.Report)
    展开
  • 2019-07-19
    enum Role {
        Reporter = 1,
        Developer,
        Maintainer,
        Owner,
        Guest
    }

    function initByRole(role){
        if( role === Role.Reporter || role === Role.Developer){

        }else if(role === Role.Maintainer || role === Role.Owner ){

        }else if(role === Role.Guest){

        }else{

        }
    }
    展开
  • 2019-07-19

    ~~~
    ```
    enum Role{
        Reporter=1,
        Developer,
        Maintainer,
        Owner,
        Guest
    }

    function initByRole(role:Role){
        if(role===Role.Reporter||role===Role.Developer){
            console.log("1,2")
        }else if(role===Role.Maintainer||role==Role.Owner){
            console.log('4,5')
        }else if(role===Role.Guest){
            console.log(5)
        }else{
            console.log(9999)
        }
    }
    initByRole(Role.Developer);
    ```
    ~~~

    这样应该对了吧
    展开