簡體   English   中英

從帶有字符串的 Typescript 枚舉中獲取值

[英]Getting values from Typescript enum with strings

我試圖從這個枚舉中獲取值:

enum Sizes {
  Tiny = "Tiny",
  VerySmall = "Very Small",
  Small = "Small",
  Medium = "Medium",
  Large = "Large",
  VeryLarge = "Very Large"
}

使用其他 StackOverflows 中建議的以下代碼,我得到以下輸出:

var text=""
for (var size in Sizes) {
    text = text + "\n" + size;
}

console.log(text);

Tiny
VerySmall
Very Small
Small
Medium
Large
VeryLarge
Very Large

我不想要非常小的和非常大的條目,為什么會出現這些條目,我怎樣才能得到我想要的結果?

謝謝!

看起來正在使用的打字稿編譯器是 2.4 之前的,他們在枚舉中添加了字符串值支持。 通常存在從值到枚舉的反向映射,並且值通常是數字。 但是,如果您嘗試使用 2.4 之前的字符串,編譯器將不知道如何處理它(並且實際上會產生錯誤),但仍會生成源代碼。

比較 2.4:

var Sizes;
(function (Sizes) {
    Sizes["Tiny"] = "Tiny";
    Sizes["VerySmall"] = "Very Small";
    Sizes["Small"] = "Small";
    Sizes["Medium"] = "Medium";
    Sizes["Large"] = "Large";
    Sizes["VeryLarge"] = "Very Large";
})(Sizes || (Sizes = {}));

到 2.3:

var Sizes;
(function (Sizes) {
    Sizes[Sizes["Tiny"] = "Tiny"] = "Tiny";
    Sizes[Sizes["VerySmall"] = "Very Small"] = "VerySmall";
    Sizes[Sizes["Small"] = "Small"] = "Small";
    Sizes[Sizes["Medium"] = "Medium"] = "Medium";
    Sizes[Sizes["Large"] = "Large"] = "Large";
    Sizes[Sizes["VeryLarge"] = "Very Large"] = "VeryLarge";
})(Sizes || (Sizes = {}));

和 2.3 沒有字符串值:

var Sizes;
(function (Sizes) {
    Sizes[Sizes["Tiny"] = 0] = "Tiny";
    Sizes[Sizes["VerySmall"] = 1] = "VerySmall";
    Sizes[Sizes["Small"] = 2] = "Small";
    Sizes[Sizes["Medium"] = 3] = "Medium";
    Sizes[Sizes["Large"] = 4] = "Large";
    Sizes[Sizes["VeryLarge"] = 5] = "VeryLarge";
})(Sizes || (Sizes = {}));

如果您想在 2.4 及更高版本中強制進行反向映射,您可以將值斷言為any

enum Sizes {
  Tiny = <any>"Tiny",
  VerySmall = <any>"Very Small",
  Small = <any>"Small",
  Medium = <any>"Medium",
  Large = <any>"Large",
  VeryLarge = <any>"Very Large"
}

只需將其稱為功能即可。

在 TypeScript 中


enum Sizes {
  Tiny = "Tiny",
  VerySmall = "Very Small",
  Small = "Small",
  Medium = "Medium",
  Large = "Large",
  VeryLarge = "Very Large"
}
class Test {
  constructor() {
    let text = '';

    for (const key in Sizes) {
      if (Sizes.hasOwnProperty(key)) {
        text += Sizes[key] + '<br/>';
      }
    }
    console.log(text);

    text = '';
    Object.keys(Sizes).map(key => text += Sizes[key] + '<br/>');
    console.log(text);
  }
}
let t = new Test();

記住 for-In 應該有一個 if-Statement!

兩個console.log(text) ,都應該輸出相同的字符串。

Tiny<br/>Very Small<br/>Small<br/>Medium<br/>Large<br/>Very Large<br/>

如果您登錄Sizes[size]后安慰了,你會想到什么發生,為什么你得到的值。

您可以使用Object.keys獲取枚舉鍵並記錄值,如下所示:

enum Sizes {
  Tiny = "Tiny",
  VerySmall = "Very Small",
  Small = "Small",
  Medium = "Medium",
  Large = "Large",
  VeryLarge = "Very Large"
}

for (const size of Object.keys(Sizes)) {
    console.log(Sizes[size]);
}

輸出:

Tiny
Very Small
Small
Medium
Large
Very Large

轉譯示例:

 var Sizes; (function (Sizes) { Sizes["Tiny"] = "Tiny"; Sizes["VerySmall"] = "Very Small"; Sizes["Small"] = "Small"; Sizes["Medium"] = "Medium"; Sizes["Large"] = "Large"; Sizes["VeryLarge"] = "Very Large"; })(Sizes || (Sizes = {})); for (var _i = 0, _a = Object.keys(Sizes); _i < _a.length; _i++) { var size = _a[_i]; console.log(Sizes[size]); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM