TypeScript で列挙型のリテラルをループする適切な方法は何ですか?
(現在TypeScript 1.8.1を使用しています。)
次の列挙型があります:
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);
}
}
表示される結果はリストです
0
1
2
3
Intrusion,
Identification,
AbsenceTest,
Autre
列挙型には 4 つの要素しかないため、ループ内の反復は 4 回だけにする必要があります。列挙型のインデックス番号と思われる 0、1、2、3 は不要です。
ベストアンサー1
2 つのオプション:
for (let item in MotifIntervention) {
if (isNaN(Number(item))) {
console.log(item);
}
}
または
Object.keys(MotifIntervention).filter(key => !isNaN(Number(MotifIntervention[key])));
(遊び場でのコード)
編集
文字列列挙型は通常の列挙型とは見た目が異なります。たとえば、次のようになります。
enum MyEnum {
A = "a",
B = "b",
C = "c"
}
コンパイルすると次のようになります:
var MyEnum;
(function (MyEnum) {
MyEnum["A"] = "a";
MyEnum["B"] = "b";
MyEnum["C"] = "c";
})(MyEnum || (MyEnum = {}));
これによって次のオブジェクトが提供されます:
{
A: "a",
B: "b",
C: "c"
}
すべてのキー ( ["A", "B", "C"]
) は次のように取得できます。
Object.keys(MyEnum);
そして値(["a", "b", "c"]
):
Object.keys(MyEnum).map(key => MyEnum[key])
またはオブジェクト.values():
Object.values(MyEnum)