Skip to content

Loop through a TypeScript enum

Sébastien Dubois /

2 min read

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

Picture courtesy of https://unsplash.com/@kirisrini

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

Hello everyone! I'm Sébastien Dubois. I'm an author, founder, and CTO. I write books and articles about software development & IT, personal knowledge management, personal organization, and productivity. I also craft lovely digital products 🚀

If you've enjoyed this article and want to read more like this, then subscribe to my newsletter, check out my PKM Library and my collection of books about software development 🔥.

You can follow me on Twitter 🐦

If you want to discuss, then don't hesitate to join one of my communities: the Software Crafters community, the Personal Knowledge Management community, and the focusd Productivity community
Subscribe to my newsletter
Weekly newsletter discussing personal knowledge management, software development, building in public and productivity