TypeScript Enum Type

Type Enum Type, Enum Type

An Typescript enum helps to organize a series of related values. Most of the programming languages like C, C++, Java, C#, VB.Net provide the enum data type but JavaScript does not provide the enum. We can use the enum for decision making statement and it make the code readable. Use enum keyword to declare an enum.

  

        enum Gender{
        Male,
        FeMale
        }
        console.log(Gender);        // { '0': 'Male', '1': 'FeMale', Male: 0, FeMale: 1 }
    

TypeScript support three types of enum and these are as follows

  • Number Enum
  • String Enum
  • Heterogeneous Enum

Number Enum

  

        enum Gender{
        Male=1,
        FeMale=2
        }
        console.log(Gender);         //{ '1': 'Male', '2': 'FeMale', Male: 1, FeMale: 2 }
        let male = Gender.Male;
        let female  = Gender.FeMale;

        console.log(male);      // output : 1
        console.log(female);    // output : 2
    

 

In the above code snippet, Create the Gender enum with two values(Male, Female). Initialize the value of Male to 1 and FeMale to 2.

String Enum

  


        enum Gender{
        Male='Male',
        FeMale='FeMale'
        }
        console.log(Gender);         //{ Male: 'Male', FeMale: 'FeMale' }
        let male = Gender.Male;
        let female  = Gender.FeMale;

        console.log(male);      // output : Male
        console.log(female);    // output :FeMale
    

In the above code snippet, Create the Gender enum with two values(Male, Female). Initialize with string value of Male to “Male” and FeMale to “FeMale”.

 

Heterogeneous enum

  

        enum Gender{
        Male=1,
        FeMale='FeMale'
        }
        console.log(Gender);         //{ '1': 'Male', Male: 1, FeMale: 'FeMale' }
        let male = Gender.Male;
        let female  = Gender.FeMale;

        console.log(male);      // output : 1
        console.log(female);    // output :FeMale

    

In the above code snippet, Create a Gender enum with two values(Male, Female). Initialize with  different data type number and string(1, FeMale).   

 

Enum with default value

  

        enum WeekDay{
        Monday,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday,
        Sunday
        }

        console.log(WeekDay);
        //output
        // {
        //     '0': 'Monday',
        //     '1': 'Tuesday',
        //     '2': 'Wednesday',
        //     '3': 'Thursday',
        //     '4': 'Friday',
        //     '5': 'Saturday',
        //     '6': 'Sunday',
        //     Monday: 0,
        //     Tuesday: 1,
        //     Wednesday: 2,
        //     Thursday: 3,
        //     Friday: 4,
        //     Saturday: 5,
        //     Sunday: 6
        //   }

        console.log(WeekDay.Wednesday);     // output : 2

    

In the above code snippet, create a WeekDay enum with any values. If we do not assign any value, then first value take the number value 0 and other values of enum will be increment by 1.

  

        enum WeekDay{
        Monday =1,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday,
        Sunday
        }

        console.log(WeekDay);

        // {
        //     '1': 'Monday',
        //     '2': 'Tuesday',
        //     '3': 'Wednesday',
        //     '4': 'Thursday',
        //     '5': 'Friday',
        //     '6': 'Saturday',
        //     '7': 'Sunday',
        //     Monday: 1,
        //     Tuesday: 2,
        //     Wednesday: 3,
        //     Thursday: 4,
        //     Friday: 5,
        //     Saturday: 6,
        //     Sunday: 7
        //   }
        console.log(WeekDay.Wednesday);   // 3
    

In the above code snippet, assign the first member of enum(Monday) with number value 1. The remaining members value will be incremented by 1;

Access the Enum member values

There are two ways to access the enum member values these are as follows 

  • member_name
  • Enum[member_name]
  

        enum WeekDay{
        Monday,
        Tuesday,
        Wednesday ,
        Thursday,
        Friday,
        Saturday,
        Sunday
        }

        let enum_value1= WeekDay.Wednesday;
        let enum_value2 =WeekDay['Wednesday']

        console.log(enum_value1);       // output : 2
        console.log(enum_value2);       // output : 2

    

Computed Enum

  

        const weekNumber=(dayName:string ):number=>{
        if(dayName == 'Wednesday'){
        return 3;
        }
        else if(dayName =='Thursday'){
        return 4
        }
        else if(dayName =='Friday'){
        return 5
        }
        return 99
        }

        enum WeekDay{
        Monday =1,
        Tuesday=2,
        Wednesday=weekNumber('Wednesday'),
        Thursday=weekNumber('Thursday'),
        Friday=weekNumber('Friday'),
        Saturday=(Friday+1),
        Sunday=7
        }

        console.log(WeekDay);

        // {
        //     '1': 'Monday',
        //     '2': 'Tuesday',
        //     '3': 'Wednesday',
        //     '4': 'Thursday',
        //     '5': 'Friday',
        //     '6': 'Saturday',
        //     '7': 'Sunday',
        //     Monday: 1,
        //     Tuesday: 2,
        //     Wednesday: 3,
        //     Thursday: 4,
        //     Friday: 5,
        //     Saturday: 6,
        //     Sunday: 7
        //   }

    

In above code snippet, enum members values are initialize with const and computed value both. 

 In computed enum , all the unassigned member come first or come after the number member value otherwise it will throw the compile time error like below code snippet.

  

        Enum WeekDay{
        Monday =1,
        Tuesday=2,
        Wednesday=weekNumber(‘Wednesday’),
        Thursday=weekNumber(‘Thursday’),
        Friday,  //error TS1061: Enum member must have initializer.
        Saturday=(Friday+1),
        Sunday=7
        }
    

Reverse Mapping

Enum reverse mapping means you can access the member value and member name from its value

  

        enum WeekDay{
        Monday,
        Tuesday,
        Wednesday ,
        Thursday,
        Friday,
        Saturday,
        Sunday
        }

        let enum_value1= WeekDay.Wednesday;   // access the member value
        let enum_value2 =WeekDay['Wednesday'] // access the member value
        let enum_value3 =WeekDay[2]         // access the member name from its value

        console.log(enum_value1);       // output : 2
        console.log(enum_value2);       // output : 2

        console.log(enum_value3);     // output  Wednesday
    

Enum as function argument

  

        enum WeekDay{
        Monday,
        Tuesday,
        Wednesday ,
        Thursday,
        Friday,
        Saturday,
        Sunday
        }

        function getWeekDayNumber(weekDay:WeekDay){
        console.log(weekDay);
        }

        getWeekDayNumber(WeekDay.Sunday);       // output : 6
        getWeekDayNumber(WeekDay.Monday);       //// output : 6

    

Enum as function return type

  

        enum WeekDay{
        Monday,
        Tuesday,
        Wednesday ,
        Thursday,
        Friday,
        Saturday,
        Sunday
        }



        function getWeekDay(day:string):WeekDay{

        if(day=='Monday')
        {
        return WeekDay.Monday
        }
        else if(day=='Tuesday'){
        return WeekDay.Tuesday
        }

        return WeekDay.Sunday
        }

        let result : WeekDay = getWeekDay('Monday');
        let result1 : WeekDay = getWeekDay('Tuesday');

        console.log(result);  // 0
        console.log(result1); // 1