Bird
Raised Fist0
Typescriptprogramming~10 mins

Union vs intersection mental model in Typescript - Visual Side-by-Side Comparison

Choose your learning style10 modes available
Concept Flow - Union vs intersection mental model
Start with Type A
↓
Union: A | B
↓
Intersection: A & B
↓
Use in code to allow flexible or strict types
Union types allow values from either type, intersection types require values to satisfy both types.
Execution Sample
Typescript
type A = { name: string };
type B = { age: number };

let union: A | B = { name: "Alice" };
let intersection: A & B = { name: "Bob", age: 30 };
Shows a union type allowing either A or B, and an intersection type requiring both A and B properties.
Execution Table
StepVariableTypeValueExplanation
1unionA | B{ name: "Alice" }Assign object with only 'name' property, valid for union type
2unionA | B{ age: 25 }Assign object with only 'age' property, also valid for union type
3unionA | B{ name: "Eve", age: 40 }Assign object with both properties, valid for union type
4intersectionA & B{ name: "Bob", age: 30 }Assign object with both 'name' and 'age', required for intersection type
5intersectionA & B{ name: "Carol" }Error: missing 'age' property, invalid for intersection type
6intersectionA & B{ age: 22 }Error: missing 'name' property, invalid for intersection type
💡 Execution stops because intersection type requires all properties from both types, union allows either.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6
unionundefined{ name: "Alice" }{ age: 25 }{ name: "Eve", age: 40 }---
intersectionundefined---{ name: "Bob", age: 30 }ErrorError
Key Moments - 3 Insights
Why can the union type variable hold an object with only 'name' or only 'age'?
Because union types allow values to be from either type A or type B, so having just one property from either is valid as shown in execution_table rows 1 and 2.
Why does the intersection type variable require both 'name' and 'age' properties?
Intersection types combine both types, so the value must have all properties from A and B, which is why rows 5 and 6 show errors when properties are missing.
Can the union type variable hold an object with both 'name' and 'age'?
Yes, union types accept values from either type, so an object with both properties is valid as in row 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of 'union' at step 2?
A{ name: "Alice" }
B{ age: 25 }
C{ name: "Eve", age: 40 }
DError
💡 Hint
Check the 'Value' column for 'union' at step 2 in the execution_table.
At which step does the 'intersection' variable get assigned a valid value?
AStep 4
BStep 5
CStep 6
DNone
💡 Hint
Look for the first step where 'intersection' has a non-error value in the execution_table.
If we remove the 'age' property from the intersection object at step 4, what happens?
AIt becomes valid as a union type
BIt causes an error for intersection type
CIt is valid for both union and intersection types
DIt causes an error for union type
💡 Hint
Refer to execution_table rows 5 and 6 where missing properties cause errors for intersection.
Concept Snapshot
Union (A | B): value can be from type A or type B.
Intersection (A & B): value must have all properties from both A and B.
Union is flexible, intersection is strict.
Use union for alternatives, intersection for combined requirements.
Example: let u: A | B; let i: A & B;
Full Transcript
This visual execution shows how union and intersection types work in TypeScript. Union types allow a variable to hold a value from either type, so it can have properties from A or B or both. Intersection types require the variable to have all properties from both types, so missing any property causes an error. The execution table traces assignments step-by-step, showing valid and invalid cases. The variable tracker highlights how values change or cause errors. Key moments clarify why union is flexible and intersection is strict. The quiz tests understanding by referencing specific steps and values. The snapshot summarizes the core difference and usage of union and intersection types.

Practice

(1/5)
1. Which statement best describes a union type in TypeScript?
easy
A. A value must have all combined types, like string & number.
B. A value can be one type or another, like string | number.
C. It restricts a value to only one specific type.
D. It creates a new type by excluding some properties.

Solution

  1. Step 1: Understand union type meaning

    A union type means a value can be one of several types, for example, string | number means the value can be either a string or a number.
  2. Step 2: Compare with intersection type

    An intersection type requires a value to have all combined types, which is different from union. So a value can be one type or another, like string | number, correctly describes union.
  3. Final Answer:

    A value can be one type or another, like string | number. -> Option B
  4. Quick Check:

    Union = one of multiple types [OK]
Hint: Union means one type OR another, intersection means ALL types [OK]
Common Mistakes:
  • Confusing union with intersection
  • Thinking union requires all types simultaneously
  • Mixing up syntax symbols | and &
2. Which of the following is the correct syntax for an intersection type combining A and B?
easy
A. type C = A | B;
B. type C = A, B;
C. type C = A + B;
D. type C = A & B;

Solution

  1. Step 1: Recall intersection syntax

    Intersection types use the ampersand & symbol to combine types, meaning the value must satisfy both types.
  2. Step 2: Identify correct syntax

    type C = A & B; uses A & B, which is the correct syntax for intersection types in TypeScript.
  3. Final Answer:

    type C = A & B; -> Option D
  4. Quick Check:

    Intersection uses & symbol [OK]
Hint: Intersection uses & symbol, union uses | symbol [OK]
Common Mistakes:
  • Using | instead of & for intersection
  • Using invalid operators like + or comma
  • Confusing type alias syntax
3. What is the type of variable value after this assignment?
type A = { name: string };
type B = { age: number };

let value: A | B = { name: "Alice", age: 30 };
medium
A. Error: value must be either A or B, not both.
B. Valid: value must have only name property.
C. Valid: value has both name and age properties.
D. Error: value must have only age property.

Solution

  1. Step 1: Understand union type assignment

    The variable value is declared as A | B, meaning it can be either type A or type B.
  2. Step 2: Check assigned object

    The assigned object has both name and age properties, which does not strictly satisfy either A or B alone, so it is not valid as a union type.
  3. Final Answer:

    Error: value must be either A or B, not both. -> Option A
  4. Quick Check:

    Union requires value to match one type exactly [OK]
Hint: Union requires value to match one type exactly [OK]
Common Mistakes:
  • Thinking union allows objects with all properties combined
  • Confusing union with intersection requirements
  • Assuming extra properties are allowed in union
4. Identify the error in this TypeScript code:
type A = { name: string };
type B = { age: number };

let person: A & B = { name: "Bob" };
medium
A. Syntax error in type declaration.
B. Incorrect use of union instead of intersection.
C. Missing property age in the object assigned to person.
D. Extra property name not allowed.

Solution

  1. Step 1: Understand intersection type requirements

    An intersection type A & B requires the value to have all properties from both types A and B.
  2. Step 2: Check assigned object properties

    The object assigned has only name property but is missing age, so it does not satisfy the intersection type.
  3. Final Answer:

    Missing property age in the object assigned to person. -> Option C
  4. Quick Check:

    Intersection requires all properties present [OK]
Hint: Intersection needs all properties present [OK]
Common Mistakes:
  • Thinking intersection allows partial properties
  • Confusing union and intersection requirements
  • Ignoring missing properties error
5. Given these types:
type Name = { name: string };
type Age = { age: number };
type Contact = { email: string };

// Which type correctly represents a value that must have a name and either age or email?

// Choose the correct type for Person:
hard
A. type Person = Name & (Age | Contact);
B. type Person = (Name & Age) | Contact;
C. type Person = Name | Age & Contact;
D. type Person = Name & Age & Contact;

Solution

  1. Step 1: Analyze requirement

    The value must have a name property and either an age or email property.
  2. Step 2: Translate to types

    This means the type must be Name AND (either Age OR Contact), which is Name & (Age | Contact).
  3. Step 3: Check options

    type Person = Name & (Age | Contact); matches this exactly. Other options either change the logic or require all three properties.
  4. Final Answer:

    type Person = Name & (Age | Contact); -> Option A
  5. Quick Check:

    Name AND (Age OR Contact) = Name & (Age | Contact) [OK]
Hint: Use parentheses to combine union and intersection correctly [OK]
Common Mistakes:
  • Ignoring parentheses changing logic
  • Mixing order of union and intersection
  • Choosing all properties instead of either/or
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