diff --git a/src/index.ts b/src/index.ts index 2da8a0d6eba01655adfd3edb28282925e3e2d455..f0a9323bd637fece6aebfb8ceafe81c1df534db1 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 0000000000000000000000000000000000000000..8c0186b4c1dd946353bbeebd804795f94580c321 --- /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]); + } +}