How to drive a class (used to simulate an enum) iterable?

Viewed 18

I use Javascript classes to simulate enums (don't suggest me to use Typescript please). When I enter console.log(...MyEnumClass), I get Uncaught TypeError: MyEnumClass is not iterable.

I implement a generator but it doesn't work as expected:

class MyEnumClass {

    static A = new MyEnumClass("A");

    static B = new MyEnumClass("A");

    static #values = Object.freeze([MyEnumClass.A, MyEnumClass.B]);

    static values() {
        return MyEnumClass.#values;
    }

    static *[Symbol.iterator]() {
        yield* MyEnumClass.#values;
    }

    #name;

    constructor(name) {
        this.#name = name;
        Object.freeze(this);
    }

    name() {
        return this.#name;
    }
}

Removing the static keyword before the generator declaration doesn't help. For now, I iterate over the array returned by values() but I'd like to find a better solution.

0 Answers
Related