Class property declarations in Typescript - Time & Space Complexity
Let's see how the time it takes to run code changes when we use class property declarations in TypeScript.
We want to know how declaring properties affects the work done when creating objects.
Analyze the time complexity of the following code snippet.
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const people: Person[] = [];
for (let i = 0; i < n; i++) {
people.push(new Person(`Name${i}`, i));
}
This code creates n Person objects, each with two properties set during construction.
- Primary operation: Creating a new Person object and assigning its properties inside the constructor.
- How many times: This happens once for each of the n iterations in the loop.
Each new object requires setting two properties, and this happens for every item in the loop.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 20 property assignments (2 per object x 10 objects) |
| 100 | About 200 property assignments |
| 1000 | About 2000 property assignments |
Pattern observation: The work grows directly with the number of objects created.
Time Complexity: O(n)
This means the time to create all objects grows in a straight line as we add more objects.
[X] Wrong: "Declaring properties inside the class makes object creation instant or constant time regardless of how many objects."
[OK] Correct: Each object still needs its own properties set, so the time grows with the number of objects created.
Understanding how object creation scales helps you explain performance when working with many instances in real projects.
What if we added a loop inside the constructor that runs m times? How would the time complexity change?
Practice
Solution
Step 1: Understand what class properties represent
Class properties hold data or information specific to each object created from the class.Step 2: Differentiate properties from methods and other elements
Functions inside classes are called methods, not properties. Properties are for storing values.Final Answer:
To store data related to each object created from the class -> Option DQuick Check:
Class properties = store object data [OK]
- Confusing properties with methods
- Thinking properties create new classes
- Believing properties import modules
Solution
Step 1: Recall TypeScript property syntax
Properties are declared asname: type = defaultValue;.Step 2: Check each option for correct syntax
class Car { speed: number = 0; } matches the correct syntax:speed: number = 0;. Others have incorrect order or missing punctuation.Final Answer:
class Car { speed: number = 0; } -> Option BQuick Check:
Property syntax = name: type = value [OK]
- Swapping type and value order
- Missing colon between name and type
- Using wrong punctuation
class Person {
name: string = "Alice";
age: number = 30;
}
const p = new Person();
console.log(p.name + ' is ' + p.age + ' years old');Solution
Step 1: Understand property initialization
The class Person has propertiesnameandageinitialized with "Alice" and 30 respectively.Step 2: Check the output of console.log
Creating an objectpsets these properties. The log concatenates them into the string "Alice is 30 years old".Final Answer:
"Alice is 30 years old" -> Option AQuick Check:
Initialized properties print correct values [OK]
- Assuming properties are undefined without constructor
- Confusing property names or types
- Expecting runtime errors without syntax mistakes
class Book {
title string = "Unknown";
pages: number = 100;
}Solution
Step 1: Check syntax of property declarations
Property declarations require a colon ':' between the name and type, liketitle: string.Step 2: Identify the incorrect line
The linetitle string = "Unknown";misses the colon, causing a syntax error.Final Answer:
Missing colon ':' between property name and type in 'title string = "Unknown";' -> Option CQuick Check:
Property syntax requires colon ':' [OK]
- Omitting colon between name and type
- Thinking default values are not allowed
- Ignoring case sensitivity of class names (not an error)
Student with a property grades that stores an array of numbers and defaults to an empty array. Which is the correct declaration to ensure each object has its own separate array?Solution
Step 1: Understand instance vs static properties
Instance properties belong to each object separately; static properties are shared by all objects.Step 2: Check which option creates separate arrays per object
class Student { grades: number[] = []; } declaresgradesas an instance property with default empty array, so each object gets its own array.Step 3: Analyze other options
class Student { static grades: number[] = []; } uses static, so all objects share one array (not desired). class Student { grades: number[]; } // no default value has no default, so array is undefined unless set later. class Student { grades = []; } misses type annotation explicitly, inferring any[] instead of number[].Final Answer:
class Student { grades: number[] = []; } -> Option AQuick Check:
Instance property with default array = separate arrays [OK]
- Using static for properties needing separate values
- Not initializing arrays causing undefined errors
- Omitting type annotation (less clear)
Ready to prove it?
Pass the test and this pattern moves unknown
