Loop through a TypeScript enum

Discover how to iterate over the keys and values of a TypeScript enum

Loop through a TypeScript enum

Enums are awesome. Let’s learn about a cool trick today.

Enums are cool, but string enums are even better. I’m using those quite a lot in my projects because they allow to write clear & readable code.

In this article, I’ll show you how to iterate over the keys & values of a string enum in TypeScript.

Example

Let’s assume that we have the following string enum:

This is a basic enum that represents the possible states of some action (welcome back to the Todo app wonderland!).

Iterating over the values

In order to iterate over the values of this enum, we can use the Object.values() built-in function, which returns an array whose elements are the enumerable property values found on the object.

Note that, as stated in the MDN documentation, the order is the same as that given by looping over the property values of the object manually.

Here I’ve used the functional style, but you can also use a for..of loop, which is more efficient:

With both, you should get the following:

console.log src/database/services/database.service.spec.ts:207
To do

console.log src/database/services/database.service.spec.ts:207
In progress

console.log src/database/services/database.service.spec.ts:207
Done

Neat!

String enums are great because they are easy to refactor and easily “findable” in the code base. This is why I usually prefer string enums over string unions. Although, as pointed out by Frédéric Camblor, it all depends on what you need to be able to do; if you want to iterate over the values at runtime then prefer enums; if you want to iterate over the values at compile time only, then you can use unions strings with mapped types.

Iterating over the keys

Of course, it’s also possible to loop over the keys of a string enum, using Object.keys().

References

Here are a few references about this:

Conclusion

In this small article, I’ve shown you how to easily loop over keys and values of your string enums in TypeScript.

As I’ve explained in my book, string enums are really useful for many use cases. I wish there were as powerful as Java/Kotlin enums, but maybe that’ll come later… ;-)

That's it for today! ✨

About Sébastien

I am Sébastien Dubois. You can follow me on X 🐦 and on BlueSky 🦋.


I am an author, founder, and coach. I write books and articles about Knowledge Work, Personal Knowledge Management, Note-taking, Lifelong Learning, Personal Organization, and Zen Productivity. I also craft lovely digital products . You can learn more about my projects here.

If you want to follow my work, then become a member.


Ready to get to the next level?

To embark on your Knowledge Management journey, consider investing in resources that will equip you with the tools and strategies you need. Check out the Obsidian Starter Kit and the accompanying video course. It will give you a rock-solid starting point for your note-taking and Knowledge Management efforts.


If you want to take a more holistic approach, then the Knowledge Worker Kit is for you. It covers PKM, but expands into productivity, personal organization, project/task management, and more:

Knowledge Worker Kit and community
Unlock the next level of your career. Stop feeling disorganized, unproductive, or overwhelmed.

If you are in a hurry, then do not hesitate to book a coaching session with me:

Personal Knowledge Management Coaching
Receive personalized coaching to quickly reach your goals

Subscribe to the Newsletter 💌