📖 Scenario: You are building a simple program to represent directions in a game. You want to use enums to name the directions, but also want to make your code run faster by using const enum.
🎯 Goal: Create a const enum for directions, use it in a function to get the opposite direction, and print the result.
📋 What You'll Learn
Create a const enum called Direction with values Up = 0, Down = 1, Left = 2, Right = 3.
Create a function called getOppositeDirection that takes a Direction and returns the opposite Direction.
Use a switch statement inside getOppositeDirection to return the opposite direction.
Call getOppositeDirection with Direction.Left and print the result.
💡 Why This Matters
🌍 Real World
Enums are used in games, apps, and systems to name fixed sets of options like directions, states, or modes. Using <code>const enum</code> makes the code smaller and faster.
💼 Career
Understanding <code>const enum</code> helps you write efficient TypeScript code, which is valuable for frontend and backend development jobs where performance matters.
Progress0 / 4 steps
1
Create a const enum for directions
Create a const enum called Direction with these exact members and values: Up = 0, Down = 1, Left = 2, Right = 3.
Typescript
Hint
Use the const enum syntax and assign the exact values to each direction.
2
Create a function to get the opposite direction
Create a function called getOppositeDirection that takes a parameter dir of type Direction and returns a Direction.
Typescript
Hint
Define the function with the correct name, parameter, and return type.
3
Implement the switch to return the opposite direction
Inside the getOppositeDirection function, use a switch statement on dir to return the opposite direction: Up returns Down, Down returns Up, Left returns Right, and Right returns Left.
Typescript
Hint
Use a switch with cases for each direction and return the opposite.
4
Call the function and print the result
Call getOppositeDirection with Direction.Left and print the result using console.log.
Typescript
Hint
Use console.log to print the result of calling getOppositeDirection(Direction.Left).
Practice
(1/5)
1. What is the main benefit of using const enum in TypeScript?
easy
A. It allows enums to be modified at runtime.
B. It enables enums to be serialized to JSON automatically.
C. It replaces enum references with actual values at compile time, reducing runtime code.
D. It creates a separate JavaScript object for the enum at runtime.
Solution
Step 1: Understand what const enum does
const enum replaces enum references with their actual values during compilation, so no enum object exists at runtime.
Step 2: Compare runtime behavior
Unlike regular enums, const enum does not generate extra JavaScript code for the enum object, reducing code size and improving speed.
Final Answer:
It replaces enum references with actual values at compile time, reducing runtime code. -> Option C
Quick Check:
Const enums optimize code by replacing references with values [OK]
Hint: Const enums inline values, no runtime object created [OK]
Common Mistakes:
Thinking const enums create runtime objects
Believing const enums allow runtime modification
Confusing const enums with regular enums
2. Which of the following is the correct syntax to declare a const enum in TypeScript?
easy
A. enum Colors { Red, Green, Blue }
B. const enum Colors { Red, Green, Blue }
C. constant enum Colors { Red, Green, Blue }
D. enum const Colors { Red, Green, Blue }
Solution
Step 1: Recall the correct keyword order
The correct syntax uses the keyword const before enum to declare a const enum.
Step 2: Check each option
const enum Colors { Red, Green, Blue } matches the correct syntax: const enum Colors { Red, Green, Blue }. Options C and D use invalid keywords or order.
Final Answer:
const enum Colors { Red, Green, Blue } -> Option B
Quick Check:
Const enum syntax = const enum [OK]
Hint: Remember: const comes before enum in declaration [OK]
Common Mistakes:
Writing 'constant' instead of 'const'
Placing 'const' after 'enum'
Omitting 'const' keyword
3. Given the following code, what will be the output when compiled and run?
const enum Direction {
Up = 1,
Down,
Left,
Right
}
const move = Direction.Left;
console.log(move);
medium
A. 3
B. undefined
C. Left
D. 2
Solution
Step 1: Understand enum value assignment
The enum starts with Up = 1, so Down = 2, Left = 3, and Right = 4.
Step 2: Identify the value of Direction.Left
It is 3, so move is assigned 3, and console.log(move) prints 3.
Final Answer:
3 -> Option A
Quick Check:
Enum Left value = 3 [OK]
Hint: Count enum values starting from assigned number [OK]
Common Mistakes:
Assuming Left is 2 instead of 3
Expecting string output 'Left'
Confusing enum with object property
4. What is the error in the following TypeScript code using const enums?
const enum Status {
Active = 1,
Inactive = 0
}
console.log(Status[1]);
medium
A. Compile-time error: Cannot use reverse mapping with const enums
B. Runtime error: Status is undefined
C. No error, outputs 'Active'
D. Outputs 1
Solution
Step 1: Understand const enum limitations
Const enums do not generate an object at runtime, so reverse mapping (accessing by index) is not supported.
Step 2: Identify the error cause
Using Status[1] tries to access reverse mapping, causing a compile-time error.
Final Answer:
Compile-time error: Cannot use reverse mapping with const enums -> Option A
Quick Check:
Reverse mapping disallowed in const enums [OK]
Hint: Const enums have no reverse mapping, avoid index access [OK]
Common Mistakes:
Expecting reverse mapping to work with const enums
Thinking it outputs string 'Active'
Ignoring compile-time errors
5. You want to optimize a TypeScript program by replacing a regular enum with a const enum. Which of the following changes will NOT work correctly after this replacement?
hard
A. Using enum values directly in expressions and comparisons.
B. Using enum values as keys in a switch statement.
C. Assigning enum values to variables for later use.
D. Accessing enum values by their numeric index (reverse mapping).
Solution
Step 1: Recall const enum behavior
Const enums inline values and do not create runtime objects, so reverse mapping (index to name) is not available.
Step 2: Analyze each option
Options A, B, and D work fine as they use the inlined values directly. Accessing enum values by their numeric index (reverse mapping). requires reverse mapping, which fails with const enums.
Final Answer:
Accessing enum values by their numeric index (reverse mapping). -> Option D