Typescript學習筆記(二)枚舉


 

跟隨handbook的腳步,詳細介紹一下枚舉。

enum Direction {
    Up = 1, Down, Left, Right }

一個枚舉類型可以包含零個或多個枚舉成員,每個枚舉成員可以是一個常數,也可以是計算變量。

如果沒有初始化就會被當作常數,這是第一項為0,其余為前一項加一。

如果項具有ts表達式,在編譯的時候就會被計算出來。比如

enum FileAccess {
    // constant members
 None, Read = 1 << 1, Write = 1 << 2, ReadWrite = Read | Write // computed member G = "123".length }

 

當然,反向映射是木有問題的。

enum Enum {
    A
}
let a = Enum.A; let nameOfA = Enum[Enum.A]; // "A"

 

它被編譯成:

var Enum;
(function (Enum) { Enum[Enum["A"] = 0] = "A"; })(Enum || (Enum = {})); var a = Enum.A; var nameOfA = Enum[Enum.A]; // "A"

常數枚舉

常數枚舉是在enum關鍵字前使用const修飾符

const enum Enum {
    A = 1, B = A * 2 }

 

你編譯出來會看到js什么也沒有,是的,它是在編譯階段會被刪除,而且它和名字一樣只能使用常數表達式。(常數枚舉成員在使用的地方被內聯進來。 這是因為常數枚舉不可能有計算成員)。

const enum Enum {
    A = 1*8, B = A * 2 } var re=Enum.A; console.log( re);

 

你會看到編譯出來是

var re = 8 /* A */;
console.log(re);

 

外部枚舉

外部枚舉就像這樣,用declare關鍵字定義

declare enum Enum {
    A = 1, B, C = 2 }

 

引用中文book的話說:外部枚舉和非外部枚舉之間有一個重要的區別,在正常的枚舉里,沒有初始化方法的成員被當成常數成員。 對於非常數的外部枚舉而言,沒有初始化方法時被當做需要經過計算的。

declare enum Enum {
    A = 1, B, C = 2 } var re=Enum.A; console.log( re); 

 

如上的外部枚舉,編譯出來為

var re = Enum.A;
console.log(re);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM