• ...
    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
  • Mokc
    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
  • 轨迹。
    2020-01-30
    const enum RoleNum {
        d1 = 1,
        d2,
        d3,
        d4,
        d5,
    }
    function initByRole(role: RoleNum) {
        if(role === RoleNum.d1 || role === RoleNum.d2) {
            // do sth
            console.log('1111')
        } else if (role === RoleNum.d3 || role === RoleNum.d4) {
            // do sth
            console.log('2222')
        } else if (role === RoleNum.d5) {
            // do sth
            console.log('3333')
        } else {
            // do sth
            console.log('4444')
        }
    }
    initByRole(9)
    展开
    
    
  • 渭河
    2019-12-26
    枚举的成员 也可以作为一个类型
    enum Enum {
        A
    }

    let a : Enum.A;
    但是这样写的应用场景是什么
    展开

    作者回复: 枚举基本不会这么用,一般直接引用Enum.A来使用。这里做这样的演示,只是为了说明枚举在类型兼容性方面的内部设计规则,理解一下即可。

    
    
  • 渭河
    2019-12-26
    老师 常量枚举为什么这么设计,在编译阶段会被删除

    作者回复: 删除是为了节约运行时的代码量,而且对开发者无感知

    
    
  • Vine
    2019-12-19
    ====== 作业作业 ====
    const enum ERole {
      Reporter = 1,
      Developer,
      Maintainer,
      Owner,
      Guest
    }
    function initByRole(role: number) {
      switch (role) {
        case ERole.Reporter:
        case ERole.Developer:
          // do sth
          break;
        case ERole.Maintainer:
        case ERole.Owner:
          // do sth
          break;
        case ERole.Guest:
          //do sth
          break;
        default:
        //do sth
      }
    }
    展开
    
    
  • 👀
    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类型相互兼容,可以相互赋值。

    
    
  • cyh41
    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-09
    枚举类型的反向映射有什么作用呢?

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

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

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

    
    
  • kgdmhny
    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
        }
    }
    展开
    
    
  • espelansa
    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
    
  • Hurry
    2019-07-23
    enum Role {
      Reporter,
      Developer,
      Maintainer,
      Owner,
      Guest
    }

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

    init(Role.Developer);
    init(Role.Maintainer);
    展开
    
    
  • ywqqjw
    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);
    展开
    
    
我们在线,来聊聊吧