What is the proper way to loop through literals of an enum in TypeScript?
(I am currently using TypeScript 1.8.1.)
I've got the following enum:
export enum MotifIntervention { Intrusion, Identification, AbsenceTest, Autre } export class InterventionDetails implements OnInit { constructor(private interService: InterventionService) { let i:number = 0; for (let motif in MotifIntervention) { console.log(motif); } }
The result displayed is a list
0 1 2 3 Intrusion, Identification, AbsenceTest, Autre
I do want only four iterations in the loop as there are only four elements in the enum. I don't want to have 0 1 2 and 3 that seem to be index numbers of the enum.
Yes. Use GetValues() method in System. Enum class.
Iterating over the keys Of course, it's also possible to loop over the keys of a string enum, using Object.
Two options:
for (let item in MotifIntervention) { if (isNaN(Number(item))) { console.log(item); } }
Or
Object.keys(MotifIntervention).filter(key => !isNaN(Number(MotifIntervention[key])));
(code in playground)
String enums look different than regular ones, for example:
enum MyEnum { A = "a", B = "b", C = "c" }
Compiles into:
var MyEnum; (function (MyEnum) { MyEnum["A"] = "a"; MyEnum["B"] = "b"; MyEnum["C"] = "c"; })(MyEnum || (MyEnum = {}));
Which just gives you this object:
{ A: "a", B: "b", C: "c" }
You can get all the keys (["A", "B", "C"]
) like this:
Object.keys(MyEnum);
And the values (["a", "b", "c"]
):
Object.keys(MyEnum).map(key => MyEnum[key])
Or using Object.values():
Object.values(MyEnum)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With