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.
✗ Incorrect
Enums generate JavaScript code and exist at runtime, unlike union literal types which are erased after compilation.
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.
✗ Incorrect
Union literal types are erased during compilation, so they generate no extra 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.
✗ Incorrect
Union literal types do not exist at runtime, so you cannot iterate over their values.
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.
✗ Incorrect
Enums provide runtime objects that can be iterated, unlike union literal types.
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.
✗ Incorrect
Union literal types do not generate runtime JavaScript objects; they exist only at compile time.
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
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.
Step 2: Compare runtime presence
Since union literal types are erased after compilation, they cannot be used as runtime objects, unlike enums.
Final Answer:
Enums create runtime objects, while union literal types only exist at compile time. -> Option A
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
Step 1: Identify union literal type syntax
Union literal types use the syntax: type Name = 'value1' | 'value2' | 'value3';
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.
Final Answer:
type Colors = 'red' | 'green' | 'blue'; -> Option B
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?
StatusEnum.Active is assigned the string 'active'. The unionValue is also the string 'active'.
Step 2: Evaluate the console.log comparisons
Both enumValue === 'active' and unionValue === 'active' compare string 'active' to 'active', so both are true.
Final Answer:
true true -> Option D
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
Step 1: Check function parameter type
Function move expects a parameter of type DirectionUnion, which allows only 'UP' or 'DOWN'.
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.
Final Answer:
Calling move with 'LEFT' causes a type error. -> Option C
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?
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
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.
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.
Final Answer:
Use UserRoleEnum because it creates a runtime object for checks and type safety. -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.