2017-08-30 1 views
2

J'ai une énumération basée sur une chaîne (prise en charge dans TypeScript 2.4+). Quel est le meilleur moyen de convertir une chaîne en valeur enum correspondante (si elle existe?). S'il n'existe pas, la valeur par défaut est correcte.Conversion pour enums à base de chaînes Typescript 2.4+

export enum Theory { 
    RLJ = 'r + l = j', 
    WinterIsComing = 'winter is coming', 
    TyrionIsAarysSon = 'i buy it', 
    YoungGriffIsReal = 'doubtfull' 
} 

J'ai commencé par ce qui suit, ce qui bien sûr ne fonctionnerait pas.

function getTheory(theoryString: string): Theory { 
    let theory: Theory = Theory.RLJ; 
    if (theoryString in Theory) { 
    theory = theoryString as Theory; 
    } 

    return theory; 
} 

Une approche qui pourrait fonctionner serait de créer une carte des valeurs ENUM nom, et faire une recherche inversée, mais il semble que ne devrait pas être nécessaire (ou que tapuscrit a une meilleure construit en approche) .

Répondre

0

Je pense que vous ne pouvez pas réaliser ce que vous voulez. Le mieux que je peux vous donner est quelque chose comme ceci:

function isTheSameTheory(theoryString: string, t: Theory) { 
    return theoryString === t; 
} 

Ou ce (ce qui est dangereux):

function toTheory(theoryString: string) { 
    return theoryString as Theory; 
}