Bird
Raised Fist0
Typescriptprogramming~5 mins

Enum vs union literal type trade-offs in Typescript - Quick Revision & Key Differences

Choose your learning style10 modes available
Recall & Review
beginner
What is a TypeScript enum?
An enum is a special TypeScript type that allows you to define a set of named constants, which can be either numeric or string values.
Click to reveal answer
beginner
What is a union literal type in TypeScript?
A union literal type is a type that can be one of several specific string or numeric literal values, written as a union of those literals.
Click to reveal answer
intermediate
Name one advantage of using enums over union literal types.
Enums provide a clear grouping of related constants and can be used both as types and values, which helps with code organization and readability.
Click to reveal answer
intermediate
What is a key trade-off when choosing union literal types instead of enums?
Union literal types are simpler and generate less JavaScript code, but they lack runtime representation and cannot be iterated over like enums.
Click to reveal answer
beginner
Why might you prefer union literal types for small sets of values?
Because union literal types are lightweight, have no runtime overhead, and provide better type safety with string literal types, making them ideal for small, fixed sets.
Click to reveal answer
Which of the following is true about TypeScript enums?
AThey only exist at compile time and generate no code.
BThey cannot have string values.
CThey generate JavaScript code and have runtime representation.
DThey are the same as union literal types.
What is a benefit of union literal types compared to enums?
AThey group constants under one object.
BThey can be iterated at runtime.
CThey allow dynamic value assignment.
DThey generate less JavaScript code.
Which is a limitation of union literal types?
AThey cannot be used as types.
BThey lack runtime representation for iteration.
CThey require explicit numeric values.
DThey have runtime overhead.
When might enums be preferred over union literal types?
AWhen you need to iterate over values at runtime.
BWhen you want zero runtime code.
CWhen you want simpler type definitions.
DWhen you want to avoid grouping constants.
Which statement about union literal types is false?
AThey generate runtime JavaScript objects.
BThey are ideal for small fixed sets of values.
CThey provide better type safety with string literals.
DThey do not support iteration at runtime.
Explain the main differences between enums and union literal types in TypeScript.
Think about runtime presence and code generation.
You got /5 concepts.
    Describe scenarios where you would choose union literal types over enums and vice versa.
    Consider runtime needs and code simplicity.
    You got /4 concepts.

      Practice

      (1/5)
      1. Which statement best describes a key difference between TypeScript enums and union literal types?
      easy
      A. Enums create runtime objects, while union literal types only exist at compile time.
      B. Union literal types generate JavaScript code, enums do not.
      C. Enums cannot restrict values, union literal types can.
      D. Union literal types allow dynamic value assignment, enums do not.

      Solution

      1. Step 1: Understand enums and union literal types

        Enums create named objects that exist in the generated JavaScript code at runtime. Union literal types only exist during TypeScript's type checking and do not produce runtime code.
      2. Step 2: Compare runtime presence

        Since union literal types are erased after compilation, they cannot be used as runtime objects, unlike enums.
      3. Final Answer:

        Enums create runtime objects, while union literal types only exist at compile time. -> Option A
      4. Quick Check:

        Runtime object presence = A [OK]
      Hint: Enums exist at runtime; union types do not [OK]
      Common Mistakes:
      • Thinking union types generate runtime code
      • Believing enums cannot restrict values
      • Confusing dynamic assignment capabilities
      2. Which of the following is the correct syntax to define a union literal type for colors 'red', 'green', and 'blue' in TypeScript?
      easy
      A. enum Colors { 'red', 'green', 'blue' }
      B. type Colors = 'red' | 'green' | 'blue';
      C. type Colors = ['red', 'green', 'blue'];
      D. enum Colors = 'red' | 'green' | 'blue';

      Solution

      1. Step 1: Identify union literal type syntax

        Union literal types use the syntax: type Name = 'value1' | 'value2' | 'value3';
      2. Step 2: Check options for correct syntax

        type Colors = 'red' | 'green' | 'blue'; correctly uses the union literal type syntax. Options B and D misuse enum syntax, and C defines a tuple type, not a union.
      3. Final Answer:

        type Colors = 'red' | 'green' | 'blue'; -> Option B
      4. Quick Check:

        Union literal type syntax = A [OK]
      Hint: Union types use | between quoted literals [OK]
      Common Mistakes:
      • Using enum syntax for union types
      • Using array syntax instead of union
      • Assigning enum with = and union syntax mixed
      3. Given the enum and union type below, what will be the output of the console.log statements?
      enum StatusEnum { Active = 'active', Inactive = 'inactive' }
      type StatusUnion = 'active' | 'inactive';
      
      const enumValue = StatusEnum.Active;
      const unionValue: StatusUnion = 'active';
      
      console.log(enumValue === 'active');
      console.log(unionValue === 'active');
      medium
      A. false false
      B. true false
      C. false true
      D. true true

      Solution

      1. Step 1: Understand enum and union values

        StatusEnum.Active is assigned the string 'active'. The unionValue is also the string 'active'.
      2. Step 2: Evaluate the console.log comparisons

        Both enumValue === 'active' and unionValue === 'active' compare string 'active' to 'active', so both are true.
      3. Final Answer:

        true true -> Option D
      4. Quick Check:

        String equality for enum and union = D [OK]
      Hint: Enum string values equal union strings if assigned same literal [OK]
      Common Mistakes:
      • Assuming enum values are numbers by default
      • Thinking enumValue is an object, not a string
      • Confusing enum and union value types
      4. Identify the error in the following TypeScript code using enums and union types:
      enum Direction {
        Up = 'UP',
        Down = 'DOWN'
      }
      
      type DirectionUnion = 'UP' | 'DOWN';
      
      function move(dir: DirectionUnion) {
        console.log(dir);
      }
      
      move(Direction.Up);
      move('LEFT');
      medium
      A. Calling move with Direction.Up causes a type error.
      B. Enum Direction is missing a 'LEFT' value causing an error.
      C. Calling move with 'LEFT' causes a type error.
      D. Function move should accept enum Direction, not union type.

      Solution

      1. Step 1: Check function parameter type

        Function move expects a parameter of type DirectionUnion, which allows only 'UP' or 'DOWN'.
      2. Step 2: Analyze function calls

        Calling move(Direction.Up) passes 'UP', which is valid. Calling move('LEFT') passes a string not in the union, causing a type error.
      3. Final Answer:

        Calling move with 'LEFT' causes a type error. -> Option C
      4. Quick Check:

        Invalid union argument = B [OK]
      Hint: Union types restrict allowed strings strictly [OK]
      Common Mistakes:
      • Assuming enum values are incompatible with union types
      • Thinking missing enum values cause errors
      • Believing function parameter types are flexible
      5. You want to create a set of fixed string values representing user roles that can be checked at runtime and also provide type safety. Which approach is best and why?
      // Option 1
      enum UserRoleEnum { Admin = 'admin', User = 'user', Guest = 'guest' }
      
      // Option 2
      type UserRoleUnion = 'admin' | 'user' | 'guest';
      hard
      A. Use UserRoleEnum because it creates a runtime object for checks and type safety.
      B. Use UserRoleUnion because it generates runtime code and is simpler.
      C. Use UserRoleUnion because enums cannot restrict string values.
      D. Use UserRoleEnum because union types cannot be used in type annotations.

      Solution

      1. Step 1: Understand runtime and type safety needs

        To check values at runtime, you need an actual JavaScript object. Enums generate this object. Union types only exist at compile time and do not generate code.
      2. Step 2: Compare options for runtime checks and type safety

        UserRoleEnum provides both runtime presence and type safety. UserRoleUnion provides only type safety but no runtime object for checks.
      3. Final Answer:

        Use UserRoleEnum because it creates a runtime object for checks and type safety. -> Option A
      4. Quick Check:

        Runtime object + type safety = C [OK]
      Hint: Enums create runtime objects; unions only type safety [OK]
      Common Mistakes:
      • Thinking union types generate runtime code
      • Believing enums cannot restrict string values
      • Assuming union types can be used for runtime checks
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard