DEV Community

Discussion on: Finally, an easy way to use TypeScript enums

Collapse
 
cubiclebuddha profile image
Cubicle Buddha • Edited

Update: You're right. That object approach also has exhaustiveness checking. I'm glad I learned something! I will say that the ts-enum-util library has many more features than what I mentioned.

Here's my original reply for posterity. Note: I was super duper wrong.


You lose the exhaustiveness checking. This code compiles and it shouldn't:

enum FoodPreference {
    vegan = 'vegan',
    vegetarian = 'vegetarian',
    omnivore = 'omnivore'
    somethingNew = 'this is the new thing that is not going to get caught'
}

const foodPreferenceQuestion : {[preference in FoodPreference] : string } = {
    [FoodPreference.vegan] : 'Do you like nuts?',
    [FoodPreference.vegetarian] : "You're really a pescatarian aren't you?",
    [FoodPreference.omnivore] : 'You are the most picky omnivore in the history of ever I bet'
};

function getFoodPreferenceQuestion(preference : FoodPreference) {
    return foodPreferenceQuestion[preference];
}

// Woops, I get undefined;
const iHopeThisIsDefined = getFoodPreference(FoodPreference.somethingNew);

If you use the library, the code will throw a compiler error saying that you forgot to handle the new case.

Collapse
 
cubiclebuddha profile image
Cubicle Buddha

I updated my comment reply because the object approach does work. Although the library does have some other really cool features like easy ways to iterate over the enum.

Thread Thread
 
samuraiseoul profile image
Sophie The Lionhart • Edited

That could be useful, though I haven't really needed enums in recent times so maybe there is something for that as well?

Either way, glad you learned something new! :D

To be fair, I had to look it up a bit as I've only used enums a handful of times on my TS projects so far so I was unfamiliar but I was pretty sure that this was an existing feature. Basically what I'm trying to say is that I too learned this. :P

Thread Thread
 
cubiclebuddha profile image
Cubicle Buddha

Yea I recently had to iterate over an enum for a React project and its basically a giant headache. So when you need to do it it’s nice to have a library to reduce the headache haha.