2017-08-13 65 views
2

我有以下枚舉:從字符串ID以打字稿有效枚舉值獲取/角

export enum Probability { 
    Certain = 1, 
    AlmostCertain = 2, 
    Likely = 3, 
    Unlikely = 4, 
    AlmostImpossible = 5, 
    Impossible = 6, 
} 

的數字在下拉菜單中得到引用,所以當我檢索值我得到「1」,「2」等

我遇到的問題是然後試圖使用該值作爲「枚舉」。

因此,例如:

export function probabilityLabel(probability: Probability): string { 
    switch (probability) { 
     case Probability.Certain: 
      return "Certain"; 
     case Probability.AlmostCertain: 
      return "Almost Certain"; 

,然後調用它沿着線的東西: probabilityLabel(this.form.get( '概率')值)//所以基本上通過在 「1」

這不符合。

我怎樣才能從「1」得到什麼東西匹配時通過?

一些我嘗試過的方法... ProbabilityLabel(「1」);

let probability:Probability = Probability [「1」];

console.log(「second attempt」,ProbabilityLabel(probability));

我創建了一個可複製plunkr這裏: http://plnkr.co/edit/8sGJeDGL0wmgBU9WxtQ4?p=preview

+0

'的console.log(「第一次嘗試「,ProbabilityLabel(1));'使用數字?如果你展示真實的用例,我想可以給出更詳細的答案。 – echonax

+0

我給了一個plunkr與這不工作?字符串值來自與解決問題無關的反應形式,我最終得到一個字符串值。你是說把它轉換成數字嗎? – Simon

+0

是的,就像'Number(「1」)' – echonax

回答

1
enum Probability { 
    Certain = 1, 
    AlmostCertain = 2, 
    Likely = 3, 
    Unlikely = 4, 
    AlmostImpossible = 5, 
    Impossible = 6 
} 
let p:Probability; 
p = Probability.Unlikely; 
alert(Probability[p]); 
enum Probability2 { 
    Certain, 
    AlmostCertain, 
    Likely, 
    Unlikely, 
    AlmostImpossible, 
    Impossible 
} 
let p2:Probability2; 
p2 = Probability.Unlikely; 
alert(Probability[p2]); 
let s: string = Probability[p2]; 
alert(s); 
let p3: Probability2 = Probability[Probability[s]]; 
alert(p3); 
let p4: Probability2 = [Probability[s]]; 
alert(p4); // Will be number 

here可以在Typescript playground運行這段代碼。

不幸的是,代碼被用某種URL限制截斷,但你可以從上面複製/粘貼並運行它在操場

BTW你並不需要在所有的枚舉值的數。第一個將被抵消。因此,某些= 5,將使AlmostCertain 6,可能是7等

如果你P4:Probability2 =概率[S]你會得到一個號碼,如果你提醒它

+0

謝謝你。我確實需要數字。它們將成爲數據庫中的參考ID,因此我需要保留這些參考ID。也如上所述,我從反應形式控件獲取id作爲字符串,所以我試圖從一個數字的字符串版本直到在交換機中匹配的枚舉值。 – Simon