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
