Vyhledávání na webu

Získání platné hodnoty enum z identifikátoru řetězce v TypeScriptu/Angularu


Mám následující výčet:

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

Čísla se odkazují v rozbalovacích seznamech, takže když získám hodnotu, dostanu „1“, „2“ atd.

Problém, který mám, je pak pokus použít tuto hodnotu „jako“ výčtový typ.

Tak například:

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

A pak to nazvat něčím ve smyslu: probabilityLabel(this.form.get('probability').value)//takže v podstatě předávám „1“

To se neshoduje.

Jak mohu postupovat, abych se dostal od "1" k něčemu, co bude odpovídat, když to bude předáno?

Několik způsobů, které jsem vyzkoušel... ProbabilityLabel("1");

nechť pravděpodobnost: Pravděpodobnost=Pravděpodobnost["1"];

console.log("druhý pokus", ProbabilityLabel(probability));

Vytvořil jsem zde možné replikovatelný plunkr: http://plnkr.co/edit/8sGJeDGL0wmgBU9WxtQ4?p=preview

Odpověď č. 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

Podívej se sem. Tento kód můžeš spustit v Typescript playground.

(Bohužel se kód zkrátí kvůli nějakému limitu URL, ale můžete ho zkopírovat/vložit shora a spustit ho v playgroundu)

Mimochodem, nemusíte mít čísla u všech hodnot v enum. První bude offset. Takže Certain=5 by udělalo AlmostCertain 6, Likely 7 atd.

Pokud uděláte p4:Probability2=Probability[s], dostanete číslo, pokud ho zobrazíte pomocí alertu