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