Intersection type syntax in Typescript - Time & Space Complexity
Let's see how the time cost grows when using intersection types in TypeScript.
We want to know how combining types affects the work the program does.
Analyze the time complexity of the following code snippet.
type A = { name: string };
type B = { age: number };
function combine(objA: A, objB: B): A & B {
return { ...objA, ...objB };
}
const person = combine({ name: 'Alice' }, { age: 30 });
This code merges two objects into one using an intersection type.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Copying properties from both objects using spread syntax.
- How many times: Once per property in each object.
As the number of properties in the objects grows, the copying work grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 20 property copies (10 from each object) |
| 100 | About 200 property copies |
| 1000 | About 2000 property copies |
Pattern observation: The work grows roughly in direct proportion to the total number of properties combined.
Time Complexity: O(n)
This means the time to combine objects grows linearly with the total number of properties.
[X] Wrong: "Intersection types make the program run slower exponentially because they combine types."
[OK] Correct: Intersection types only combine properties, so the work grows linearly with property count, not exponentially.
Understanding how combining types affects performance helps you write clear and efficient code, a skill valued in real projects.
"What if we combined three or more objects instead of two? How would the time complexity change?"
Practice
What does the intersection type type AB = A & B; mean in TypeScript?
Solution
Step 1: Understand intersection operator &
The&symbol in TypeScript creates an intersection type combining all properties from both types.Step 2: Compare with union and other operations
Unlike union (|), intersection requires all properties from both types to be present.Final Answer:
It combines types A and B so the result has all properties from both. -> Option CQuick Check:
Intersection = all properties combined [OK]
- Confusing intersection (&) with union (|)
- Thinking intersection keeps only common properties
- Assuming intersection excludes properties
Which of the following is the correct syntax to define an intersection type of Person and Employee?
Solution
Step 1: Recall intersection syntax
Intersection types use the&symbol to combine types.Step 2: Check each option
type Staff = Person & Employee;uses&correctly for intersection.type Staff = Person | Employee;uses union|. Comma is invalid syntax.&&is a logical operator, not type syntax.Final Answer:
type Staff = Person & Employee; -> Option BQuick Check:
Intersection syntax = & [OK]
- Using | instead of & for intersection
- Using commas or && which are invalid
- Confusing logical operators with type operators
What is the type of variable user after this code?
type A = { name: string };
type B = { age: number };
const user: A & B = { name: "Alice", age: 30 };Solution
Step 1: Understand intersection type A & B
The typeA & Bcombines properties from both A and B, so it must havenameandage.Step 2: Check the assigned object
The object has bothname: "Alice"andage: 30, matching the intersection type.Final Answer:
{ name: string; age: number } -> Option DQuick Check:
Intersection type = combined properties [OK]
- Thinking intersection keeps only one type's properties
- Expecting a type error when all properties are present
- Confusing intersection with union
Identify the error in this TypeScript code using intersection types:
type X = { a: number };
type Y = { b: string };
const obj: X & Y = { a: 5 };Solution
Step 1: Check required properties for intersection X & Y
The intersection requires all properties from both X and Y, so bothaandbmust be present.Step 2: Inspect the object literal
The object only hasa: 5but is missingb, causing a type error.Final Answer:
Missing property 'b' from type Y in the object. -> Option AQuick Check:
Intersection requires all properties present [OK]
- Forgetting to include all properties in intersection
- Confusing intersection with union allowing partial properties
- Misusing & operator syntax
Given these types, which is the correct way to define a variable fullInfo that must have all properties from Person, Employee, and Contact?
type Person = { name: string };
type Employee = { id: number };
type Contact = { email: string };Solution
Step 1: Understand combining multiple types
To require all properties from Person, Employee, and Contact, use intersection of all three types with&.Step 2: Analyze each option
const fullInfo: Person & Employee & Contact = { name: "Bob", id: 1, email: "bob@example.com" }; correctly usesPerson & Employee & Contact. const fullInfo: Person | Employee | Contact = { name: "Bob", id: 1, email: "bob@example.com" }; uses union which allows any one type only. Mixing union and intersection incorrectly.Final Answer:
const fullInfo: Person & Employee & Contact = { name: "Bob", id: 1, email: "bob@example.com" }; -> Option AQuick Check:
All properties require intersection & [OK]
- Using union | instead of intersection & for all properties
- Mixing union and intersection without parentheses
- Assuming union requires all properties
Ready to prove it?
Pass the test and this pattern moves unknown
