From 6f43db87d21368832445d3cf170d06ea628aeb97 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Fri, 9 Feb 2018 16:47:21 +0100
Subject: [PATCH] =?UTF-8?q?=20#36=20:=20ajout=20de=20m=C3=A9thodes=20(Enum?=
 =?UTF-8?q?Ex)=20de=20manipulation=20des=20enums?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/index.ts     |  1 +
 src/util/enum.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+)
 create mode 100644 src/util/enum.ts

diff --git a/src/index.ts b/src/index.ts
index 2da8a0d6..f0a9323b 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -23,3 +23,4 @@ export * from "./util/interval";
 export * from "./pab/pab_dimension";
 export * from "./pab/pab_puissance";
 export * from "./util/iterator";
+export * from "./util/enum";
diff --git a/src/util/enum.ts b/src/util/enum.ts
new file mode 100644
index 00000000..8c0186b4
--- /dev/null
+++ b/src/util/enum.ts
@@ -0,0 +1,45 @@
+/**
+ * classe d'itérateurs pour les enums
+ * cf. https://stackoverflow.com/questions/21293063/how-to-programmatically-enumerate-an-enum-type-in-typescript-0-9-5#21294925
+ 
+   utilisation : 
+
+    for (const v of EnumEx.getValues(MonTypeEnum)) {
+       console.log(v);
+    }
+
+    for (const n of EnumEx.getNames(MonTypeEnum)) {
+       console.log(n);
+    }
+
+    for (const c of EnumEx.getNamesAndValues(MonTypeEnum)) {
+       console.log(c.name);
+       console.log(c.value);
+    }
+ */
+export class EnumEx {
+    /**
+     * retourne les noms et les valeurs d'un enum
+     */
+    static getNamesAndValues<T extends number>(e: any) {
+        return EnumEx.getNames(e).map(n => ({ name: n, value: e[n] as T }));
+    }
+
+    /**
+     * retourne les noms d'un enum
+     */
+    static getNames(e: any) {
+        return EnumEx.getObjValues(e).filter(v => typeof v === "string") as string[];
+    }
+
+    /**
+     * retourne les valeurs d'un enum
+     */
+    static getValues<T extends number>(e: any) {
+        return EnumEx.getObjValues(e).filter(v => typeof v === "number") as T[];
+    }
+
+    private static getObjValues(e: any): (number | string)[] {
+        return Object.keys(e).map(k => e[k]);
+    }
+}
-- 
GitLab