当前播放: 06 | 枚举类型
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程目录
第一章:基础篇 (21讲)
01 | 重塑“类型思维”
免费
02 | 类型基础(1):强类型与弱类型
免费
03 | 类型基础(2):动态类型与静态类型
免费
04 | 编写你的第一个TypeScript程序
免费
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):条件类型
第二章:工程篇 (10讲)
22 | ES6与CommonJS的模块系统
23 | 使用命名空间
24 | 理解声明合并
25 | 如何编写声明文件
26 | 配置tsconfig.json(1):文件选项
27 | 配置tsconfig.json(2):编译选项
28 | 配置tsconfig.json(3):工程引用
29 | 编译工具:从ts-loader到Babel
30 | 代码检查工具:从TSLint到ESLint
31 | 使用Jest进行单元测试
第三章:实战篇 (16讲)
32 | 创建项目
33 | 组件与类型(1):函数组件与类组件
34 | 组件与类型(2):高阶组件与Hooks
35 | 事件处理与数据请求
36 | 列表渲染与路由
37 | Redux与类型
38 | 搭建服务端开发环境
39 | 列表的CRUD
40 | 导出Excel
41 | 搭建Vue开发环境
42 | 组件封装
43 | 组件发布
44 | 共存策略
45 | 宽松策略
46 | 严格策略
47 | 结束语
06 | 枚举类型

06 | 枚举类型

梁宵
搜狗营销事业部高级架构师
47讲 约450分钟3033
单独订阅¥129
2人成团¥99
2
本节摘要
登录 后留言

精选留言(22)

  • ...
    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

        }
    }
    2019-07-28
    4
  • 安冬
    ```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
        }
    }
    ```
    2019-08-04
    2
  • Mokc
    老师我想请问如果枚举类型是有名字的常量的集合的话,那么常量还是不能改变的,硬编码问题还是没有得到解决的吧?

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

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

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

    2019-07-22
    2
    1
  • 齐庆福
    ```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)
    ```
    2019-07-21
    1
  • 极客时间
    ~~~
    ```
    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);
    ```
    ~~~
    不知道是不是这样改

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

    2019-07-18
    1
  • Vine
    ====== 作业作业 ====
    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-12-19
  • 👀
    这个 枚举跟 用js 定义个对象的作用差不多, 具体区别只是枚举是相互映射的吗

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

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

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

    2019-09-03
  • cyh41
    老师我想问一下,枚举的使用场景是什么?比如简单的循环下拉框数组[{ 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
    }

    2019-09-02
    1
  • 东丰瑞雪建华年
    枚举类型的反向映射有什么作用呢?

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

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

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

    2019-08-05
  • kgdmhny
    老师,请问一下,
    为什么 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-28
  • 我爱琴妹妹
    作业:
    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
  • espelansa
    交作业~~
    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、文本提示信息、分类信息等等,这样方便记忆,减少硬编码,增加可读性。

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

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

    init(Role.Developer);
    init(Role.Maintainer);
    2019-07-23
  • ywqqjw
    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-22
  • 齐庆福
    你好,请问以下vscode和浏览器同框可以拖拽大小,你用的什么插件呢

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

    2019-07-21
  • 林逸舟
    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
  • strive0212
    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
收起评论
看过的人还看
浏览器工作原理与实践

李兵  前盛大创新院高级研究员

43讲 | 6259 人已学习

拼团 ¥79 原价 ¥99
Node.js开发实战

杨浩  腾讯高级工程师

57讲 | 3859 人已学习

拼团 ¥99 原价 ¥129
JavaScript核心原理解析

周爱民  《JavaScript语言精髓与编程实践》作者,南潮科技(Ruff)首席架构师

21讲 | 3624 人已学习

拼团 ¥55 原价 ¥68
玩转webpack

程柳锋  腾讯高级工程师,IVWEB团队社区和工程化负责人

84讲 | 5470 人已学习

拼团 ¥79 原价 ¥99