最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • TypeScript入门:枚举类型

    正文概述 掘金(jenvyxu)   2021-01-14   600

    数字枚举

    enum Role {
        Reporter = 1,
        Developer,
        Maintainer,
        Owner,
        Guest
    }
    console.log(Role.Reporter) // 1
    console.log(Role.Developer) // 2
    console.log(Role[2]) // 'Developer'
    

    默认第一个成员的值为0,后面成员的值依次递增,但是也可以给每个成员赋值一个初始值,可以通过字符串去索引数字,也可以通过数字去索引字符串 TypeScript入门:枚举类型

    字符串枚举

    enum Message {
        Success = 'success',
        Fail = 'fail'
    }
    
    console.log(Message.Success) // 'success'
    console.log(Message['success']) // undefined
    

    只能通过Success去索引success,不能反过来用success去索引Success

    异构枚举

    enum Answer {
        N,
        Y = 'Yes'
    }
    console.log(Answer.N) // 0
    console.log(Answer.Y) // 'Yes'
    

    枚举的成员中同时出现数字和字符串,不建议使用

    枚举成员

    enum Char {
        // const member(常量枚举成员)
        a,
        b = Char.a,
        c = 1 + 3,
        // computed member(计算枚举成员)
        d = Math.random(),
        e = '123'.length,
        f = 4
    }
    

    常量枚举成员会在编译阶段计算出结果,然后以常量值的方式出现在运行环境,计算枚举成员不会在编译阶段被计算,会被保留到运行阶段,在运行阶段才会计算出结果。 注意:在计算成员后面的枚举成员一定要赋值一个初始值

    // ts编译结果
    "use strict";
    var Char;
    (function (Char) {
        // const member(常量枚举成员)
        Char[Char["a"] = 0] = "a";
        Char[Char["b"] = 0] = "b";
        Char[Char["c"] = 4] = "c";
        // computed member(计算枚举成员)
        Char[Char["d"] = Math.random()] = "d";
        Char[Char["e"] = '123'.length] = "e";
        Char[Char["f"] = 4] = "f";
    })(Char || (Char = {}));
    

    常量枚举

    使用const定义的枚举叫常量枚举,特点是代码会在编译后被移除

    const enum Month {
        Jan,
        Feb,
        Mar,
        Apr = Month.Mar + 1,
    }
    let month = [Month.Jan, Month.Feb, Month.Mar]
    

    当我们不需要用到对象,而需要用到对象里面的值的时候,可以使用常量枚举,常量枚举编译后的代码会在编译后被移除,从而减少了编译后的代码,让代码看起来更简洁。

    // 编译后代码
    "use strict";
    let month = [0 /* Jan */, 1 /* Feb */, 2 /* Mar */];
    

    枚举类型

    有三种枚举类型:

    1. 枚举成员没有初始值
    2. 枚举成员都是数字枚举
    3. 枚举成员都是字符串枚举

    在某些情况下,枚举和枚举成员都可以作为单独的一种类型存在

    // 枚举成员没有初始值
    enum E { a, b }
    // 枚举成员都是数字枚举
    enum F { a = 0, b = 1 }
    // 枚举成员都是字符串枚举
    enum G { a = 'apple', b = 'banana' }
    
    // 可以把任意的数字赋值给E和F类型
    let e: E = 3
    let f: F = 3
    e === f // 报错,不同枚举类型不能相互比较
     
    // 变量定义为枚举成员类型
    let e1: E.a = 3
    let e2: E.b = 3
    let e3: E.a = 3
    console.log(e1 === e2) // e1和e2是不同的枚举成员类型,会报错
    console.log(e1 === e3) // true e1和e3是相同的枚举成员类型,可以比较
    
    // 字符串枚举的取值只能是枚举成员的取值
    let g1: G = G.a
    let g2: G.a = G.a
    

    起源地下载网 » TypeScript入门:枚举类型

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元