0
0
Typescriptprogramming~20 mins

Phantom types in Typescript - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Phantom Types Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this TypeScript phantom type example?
Consider this TypeScript code using phantom types to distinguish between different units of measurement. What will be logged to the console?
Typescript
type Meter = { readonly __brand: unique symbol };
type Second = { readonly __brand: unique symbol };

function speed(distance: number & Meter, time: number & Second): number {
  return distance / time;
}

const dist = 100 as number & Meter;
const t = 20 as number & Second;

console.log(speed(dist, t));
AType error at compile time
B20
CNaN
D5
Attempts:
2 left
💡 Hint
Phantom types don't affect runtime values but help TypeScript check types.
🧠 Conceptual
intermediate
1:30remaining
Why use phantom types in TypeScript?
Which of the following best explains the main purpose of phantom types in TypeScript?
ATo create new types without runtime overhead for better type safety
BTo add extra runtime checks for values
CTo enable dynamic type casting at runtime
DTo replace interfaces with classes
Attempts:
2 left
💡 Hint
Think about how phantom types affect the compiled JavaScript.
🔧 Debug
advanced
2:30remaining
Identify the error in this phantom type usage
This TypeScript code tries to use phantom types to prevent mixing currencies. What error will occur when compiling?
Typescript
type USD = { readonly __brand: unique symbol };
type EUR = { readonly __brand: unique symbol };

function addUSD(a: number & USD, b: number & USD): number & USD {
  return (a + b) as number & USD;
}

const priceUSD = 10 as number & USD;
const priceEUR = 15 as number & EUR;

const total = addUSD(priceUSD, priceEUR);
ANo error, total is 25
BRuntime error: Cannot add different currencies
CType error: Argument of type 'number & EUR' is not assignable to parameter of type 'number & USD'.
DSyntax error: Missing return type
Attempts:
2 left
💡 Hint
Check the types of arguments passed to addUSD.
📝 Syntax
advanced
2:00remaining
Which option correctly defines a phantom type in TypeScript?
Select the correct way to define a phantom type to distinguish between Kilograms and Pounds.
A
type Kilogram = number & { __brand: unique symbol };
type Pound = number & { __brand: unique symbol };
B
interface Kilogram { value: number; }
interface Pound { value: number; }
C
type Kilogram = number | { __brand: 'Kilogram' };
type Pound = number | { __brand: 'Pound' };
D
type Kilogram = number & { __brand: 'Kilogram' };
type Pound = number & { __brand: 'Pound' };
Attempts:
2 left
💡 Hint
Phantom types use intersection with unique symbols for branding.
🚀 Application
expert
3:00remaining
How many items are in the resulting map after using phantom types as keys?
Given this TypeScript code using phantom types as keys in a Map, how many entries does the map contain after execution?
Typescript
type UserId = string & { readonly __brand: unique symbol };

const user1 = 'abc123' as UserId;
const user2 = 'abc123' as UserId;

const map = new Map<UserId, string>();
map.set(user1, 'Alice');
map.set(user2, 'Bob');

console.log(map.size);
A2
B1
C0
DRuntime error
Attempts:
2 left
💡 Hint
Phantom types do not change the runtime value or identity of strings.