TypeScript-7.enum枚舉

題外話:今天是2020.06.21 夏至+父親節+日全食。梅老闆說 今天也是新月,在這天萬物都煥然一新,加上日食和夏至,非常少見。這一天適合全新的價值觀,許下一個心願,一定要是積極的願望。我許的是 愛自己 做自己。配上一首詩。

Had I not seen the Sun

I could have borne the shade

But Light a newer Wilderness

My Wilderness has made              -------  Emily Dickinson


筆記。

// 數字枚舉
enum Status {
  Uploading,
  Success = 3,
  // 如果這裏綁定一個const量或者return值的方法
  // 自動編碼會失效,下面的枚舉必須初始化一個值
  Failed,
}
// 兩種取值方式
console.log(Status.Uploading) // 0
// tslint:disable-next-line: no-string-literal
console.log(Status['Uploading']) // 0
console.log(Status) // 反向映射 
{
    0: "Uploading"
    3: "Success"
    4: "Failed"
    Failed: 4
    Success: 3
    Uploading: 0
}

// 字符串枚舉
enum Message {
  Error = 'Sorry, error',
  Success = 'Hoho, success',
  Failed = Error
}
console.log(Message.Success)
console.log(Message.Failed)

// 異構枚舉 少用
enum Result {
  Failed = 0,
  Success = 'success'
}

// 枚舉成員類型和聯合枚舉類型
// 1. 不帶初始值的枚舉成員
enum E { A, B, C }
// 2. 值爲字符串自變量
enum F { A = 'a' }
// 3. 值爲數值(正負都可以)自變量
enum G { D = -1 }
// 所有成員爲以上三種情況,就可作爲類型
enum Animals {
  Dog = 1,
  Cat = 2
}
interface Dog {
  type: Animals.Dog
}
const dog: Dog = {
  type: Animals.Dog
}

enum Statuss {
  Off,
  On
}
interface Light {
  status: Statuss
}
const light: Light = {
  status: Statuss.On // 取值只能是 Statuss.On 或者 Statuss.Off
}

// const enum
const enum A {}
// 編譯完之後直接賦值,不會再編譯爲一個對象
// 可以在 https://www.tslang.cn/play/index.html 裏面對比
enum Animals {
  Dogs = 1
}
const dog1 = Animals.Dogs
// 編譯爲Js之後
var Animals;
(function (Animals) {
    Animals[Animals["Dog"] = 1] = "Dog";
})(Animals || (Animals = {}));
var dog = Animals.Dog;

// 加了const
const enum Animals2 {
  Dogs2 = 1
}
// 編譯爲Js之後
var dog = 1 /* Dog */;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章