InstanceType type in Typescript - Time & Space Complexity
We want to understand how the time it takes to get the instance type grows as the input changes.
Specifically, how does using the InstanceType type affect the time to create or use instances?
Analyze the time complexity of the following code snippet.
class Person {
constructor(public name: string) {}
}
function createInstance any>(ctor: T): InstanceType {
return new ctor('Alice');
}
const person = createInstance(Person);
This code creates an instance of a class using the InstanceType type helper.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Creating a new instance with
newkeyword. - How many times: Exactly once per function call.
The time to create an instance grows directly with how many times you call the function.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 instance creations |
| 100 | 100 instance creations |
| 1000 | 1000 instance creations |
Pattern observation: The work grows linearly as you create more instances.
Time Complexity: O(n)
This means the time grows in a straight line with the number of instances created.
[X] Wrong: "Using InstanceType makes instance creation slower or more complex."
[OK] Correct: InstanceType is a compile-time helper and does not affect runtime speed or complexity.
Understanding how TypeScript types like InstanceType relate to runtime helps you explain code clarity and efficiency clearly.
What if we changed the constructor to accept multiple arguments? How would that affect the time complexity of creating instances?
Practice
InstanceType do?Solution
Step 1: Understand the purpose of
InstanceTypeInstanceTypeis a utility type that extracts the type of an object created by a class constructor.Step 2: Compare options with the definition
Only Extracts the type of an instance created by a class correctly describes this behavior. Options B, C, and D describe unrelated actions.Final Answer:
Extracts the type of an instance created by a class -> Option BQuick Check:
InstanceType extracts instance type = A [OK]
- Confusing InstanceType with creating instances
- Thinking it converts types to strings
- Assuming it defines primitive types
InstanceType with a class named Car?Solution
Step 1: Recall the syntax of InstanceType
InstanceTypeexpects a constructor type, so we passtypeof Carto get the class constructor type.Step 2: Analyze each option
type CarInstance = InstanceType; usestypeof Car, which is correct. type CarInstance = InstanceType<Car>; passes the class itself, which is a value, not a type. Options A, B, and C use invalid syntax.Final Answer:
type CarInstance = InstanceType; -> Option AQuick Check:
Use typeof with class name inside InstanceType for correct syntax = D [OK]
- Passing class name directly without typeof
- Using parentheses after class name
- Trying to instantiate inside InstanceType
myDog?
class Dog {
name: string;
constructor(name: string) {
this.name = name;
}
}
let myDog: InstanceType;
myDog = new Dog('Buddy');Solution
Step 1: Understand what InstanceType means
It extracts the instance type created by the Dog class constructor, which is the class Dog itself.Step 2: Match the type of myDog
myDog is typed as an instance of Dog, so its type is Dog (the class instance type). Dog matches this exactly.Final Answer:
Dog -> Option DQuick Check:
InstanceType = Dog instance type = A [OK]
- Confusing instance type with constructor type
- Choosing typeof Class instead of instance
- Picking object shape instead of class type
InstanceType:
class Cat {
age: number;
constructor(age: number) {
this.age = age;
}
}
type CatInstance = InstanceType<Cat>;
const kitty: CatInstance = new Cat(3);Solution
Step 1: Check the usage of InstanceType
InstanceTyperequires a constructor type, so the class name must be prefixed withtypeof.Step 2: Identify the error in the code
The code usesInstanceType<Cat>instead ofInstanceType, causing a type error.Final Answer:
Missing typeof before Cat in InstanceType -> Option AQuick Check:
InstanceType needs typeof ClassName = C [OK]
- Omitting typeof before class name
- Thinking InstanceType works on instances
- Assuming InstanceType works without constructor type
Circle and Square. You want to create a function that accepts an instance of either class using InstanceType. Which of the following is the correct way to type the parameter shape?
class Circle {
radius: number;
constructor(radius: number) {
this.radius = radius;
}
}
class Square {
side: number;
constructor(side: number) {
this.side = side;
}
}
function drawShape(shape: ???) {
// drawing logic
}Solution
Step 1: Understand the goal
The function should accept instances of Circle or Square, so the parameter type must represent instances, not classes or constructors.Step 2: Analyze each option
InstanceType | InstanceType correctly usesInstanceTypeandInstanceTypecombined with a union to represent instances of both classes. Circle | Square uses class names directly, which are types of instances but does not use InstanceType. typeof Circle | typeof Square uses constructor types, which is incorrect for instances. InstanceType tries to use InstanceType on a union of classes, which is invalid.Final Answer:
InstanceType | InstanceType -> Option CQuick Check:
Use InstanceType with typeof for each class, combine with | for union [OK]
- Using class names without InstanceType
- Using typeof Class instead of InstanceType
- Trying InstanceType on union of classes directly
Ready to prove it?
Pass the test and this pattern moves unknown
