Type compatibility with classes in Typescript - Time & Space Complexity
When working with classes in TypeScript, it's important to understand how type compatibility affects performance.
We want to see how the program's work grows when checking if one class type fits another.
Analyze the time complexity of the following code snippet.
class Point {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
}
function isCompatible(a: Point, b: Point): boolean {
return a.x === b.x && a.y === b.y;
}
const p1 = new Point(1, 2);
const p2 = new Point(1, 2);
console.log(isCompatible(p1, p2));
This code checks if two Point objects have the same x and y values.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Comparing each property of the class instances.
- How many times: Once per property (here 2 properties: x and y).
As the number of properties in the class grows, the number of comparisons grows too.
| Input Size (number of properties) | Approx. Operations |
|---|---|
| 2 | 2 comparisons |
| 10 | 10 comparisons |
| 100 | 100 comparisons |
Pattern observation: The work grows directly with the number of properties to compare.
Time Complexity: O(n)
This means the time to check compatibility grows in a straight line with the number of properties.
[X] Wrong: "Type compatibility checks happen instantly no matter how many properties there are."
[OK] Correct: Each property must be checked, so more properties mean more work and longer checks.
Understanding how type compatibility scales helps you write efficient code and explain your reasoning clearly in interviews.
"What if the class had nested objects as properties? How would the time complexity change?"
Practice
Solution
Step 1: Understand Type Compatibility
TypeScript checks if the properties and their types in one class instance match those expected by another class type.Step 2: Check Class Names and Methods
Class names or method counts do not affect compatibility; only the shape (properties and types) matters.Final Answer:
When their instances have matching properties and types -> Option CQuick Check:
Compatibility = matching properties and types [OK]
- Assuming class names must match
- Thinking method count matters
- Believing file location affects compatibility
B to a variable typed as class A in TypeScript, assuming compatibility?Solution
Step 1: Review TypeScript Assignment Syntax
To assign an instance of class B to a variable typed as A, uselet a: A = new B();if B is compatible with A.Step 2: Identify Incorrect Syntax
Other options misuse constructor calls or type annotations and are invalid.Final Answer:
let a: A = new B(); -> Option BQuick Check:
Uselet var: Type = new Class();[OK]
- Calling classes like functions
- Swapping variable and type names
- Using incorrect constructor syntax
class A { x: number; }
class B { x: number; y: string; }
let a: A = new B();
console.log(a.x);What will be the output when this code runs?Solution
Step 1: Analyze Class Properties and Assignment
Class B has properties x and y. Class A has only x. Assigning new B() to a variable typed as A is allowed because B has at least the properties of A.Step 2: Check Output of console.log(a.x)
The property x exists on the B instance. Since no value is assigned to x, it is undefined, so console.log(a.x) outputs "undefined".Final Answer:
undefined -> Option AQuick Check:
Compatible class instance property accessed correctly [OK]
- Expecting runtime error due to extra properties
- Thinking assignment causes compilation error
- Assuming class properties are auto-initialized to 0
class A { x: number; }
class B { y: string; }
let a: A = new B();Solution
Step 1: Check Property Compatibility
Class A requires property x. Class B only has property y, so B instances lack x.Step 2: Understand TypeScript Compatibility Rules
TypeScript requires the assigned instance to have all properties of the target type. Missing x causes error.Final Answer:
Because B does not have property x required by A -> Option DQuick Check:
Missing required property causes error [OK]
- Thinking class names must match
- Assuming extra properties cause error
- Believing constructor call is invalid
class Person { name: string; age: number; }
class Employee { name: string; age: number; salary: number; }Which assignment is valid and why?let p: Person = new Employee();let e: Employee = new Person();Solution
Step 1: Compare Properties of Person and Employee
Employee has all properties of Person plus salary. Person lacks salary.Step 2: Check Assignment Compatibility
Assigning Employee instance to Person variable is valid (extra properties allowed). Assigning Person instance to Employee variable is invalid (missing salary).Final Answer:
Onlylet p: Person = new Employee();is valid because Employee has all Person properties -> Option AQuick Check:
Extra properties allowed, missing properties not [OK]
- Assuming both assignments are valid
- Confusing extra vs missing properties
- Thinking class names affect compatibility
Ready to prove it?
Pass the test and this pattern moves unknown
