簡體   English   中英

反向映射字符串枚舉角度4

[英]Reverse mapping string enum angular 4

我有一個字符串枚舉:

export enum TokenLength {
  SIX = '6',
  EIGHT = '8',
}

而且我需要獲取字符串“ SIX”或“ EIGHT”,以便反向映射此枚舉。 我已經嘗試了多種方法:

tokenLength = TokenLength;      

for (var enumMember in this.tokenLength) {
    console.log("enum member: ", enumMember); //result: enum member:  SIX , enum member:  EIGHT
}

for (var enumMember in this.tokenLength) {
    console.log("enum member: ", this.tokenLength[enumMember]); //result: enum member:  6, enum member:  8
}

這似乎工作得很好,但是每當我執行以下操作時,它都將不起作用。

console.log(this.tokenLength['SIX']); //result: 6
console.log(this.tokenLength.SIX); //result: 6
console.log(this.tokenLength[this.tokenLength.SIX]); //result: undefined
console.log(this.tokenLength['6']); //result: undefined
console.log(this.tokenLength[0]); //result: undefined

我需要“未定義”的結果為“六”,我該怎么做? 提前致謝。

您可以查看打字稿文檔。 打字稿

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

為了使它以這種方式工作,您必須刪除枚舉中的引號:

enum TokenLength {
      SIX = 6,
      EIGHT = 8
}

希望能有所幫助

一個答案已經存在https://stackoverflow.com/a/18112157/7771064

for (var size in TokenLength) {
    if (!parseInt(size))
        console.log(size);
}

演示: https : //stackblitz.com/edit/typescript-buqfne

根據打字稿文檔

需要注意的是,不能對通過字符串初始化的枚舉進行反向映射以獲取原始枚舉成員名稱。

因此,不幸的是這是不可能的。

function getTokenLength(value: string): TokenLength | undefined {
    const keys = Object.keys(TokenLength);
    const values = keys.map(k => TokenLength[k as any]);
    const index = values.indexOf(value);
    return index > -1 ? TokenLength[index] as TokenLength: undefined;
}

暫無
暫無

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

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