re: Finally, an easy way to use TypeScript enums VIEW POST

FULL DISCUSSION
 

Why use a library when a simple type definition would do fine for the most part?

enum FoodPreference {
    vegan = 'vegan',
    vegetarian = 'vegetarian',
    omnivore = 'omnivore'
}

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];
}
 

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.

 

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.

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

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.

code of conduct - report abuse