Declaring modules in Typescript - Time & Space Complexity
When we declare modules in TypeScript, we want to know how the time to process them changes as the code grows.
We ask: How does the work needed to handle modules grow when we add more code inside them?
Analyze the time complexity of the following code snippet.
declare module "myModule" {
export function greet(name: string): string;
export const version: string;
}
declare module "myModule" {
export function farewell(name: string): string;
}
This code declares two parts of the same module, adding functions and constants to it.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Processing each declaration inside the module.
- How many times: Once per declared item (function or constant).
As you add more declarations inside modules, the work grows in a straight line.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 |
| 100 | 100 |
| 1000 | 1000 |
Pattern observation: The work grows evenly as you add more declarations.
Time Complexity: O(n)
This means the time to process modules grows directly with the number of declarations inside them.
[X] Wrong: "Declaring multiple parts of the same module makes processing time grow faster than just adding declarations."
[OK] Correct: The compiler treats all declarations as a single list, so time grows only with total declarations, not how they are split.
Understanding how module declarations scale helps you write clear code and explain how your code grows, a useful skill in many coding discussions.
"What if we nested modules inside other modules? How would the time complexity change?"
Practice
declare module in TypeScript?Solution
Step 1: Understand the role of
This keyword is used to describe the shape or types of a module when TypeScript has no information about it.declare moduleStep 2: Differentiate from other module actions
It does not import, execute, or create code but only declares types for existing modules.Final Answer:
To tell TypeScript about the shape of a module without actual code -> Option DQuick Check:
declare module = describe types only [OK]
- Thinking declare module imports or runs code
- Confusing declare module with creating actual modules
- Using declare module to execute JavaScript
"my-lib" in TypeScript?Solution
Step 1: Recall correct syntax for module declaration
The correct syntax starts withdeclare module 'module-name'followed by curly braces containing declarations.Step 2: Check each option's order and keywords
Only declare module 'my-lib' { export function foo(): void; } uses the correct order:declare module 'my-lib' { ... }. Others mix keywords incorrectly.Final Answer:
declare module 'my-lib' { export function foo(): void; } -> Option AQuick Check:
declare module 'name' { ... } syntax [OK]
- Swapping 'module' and 'declare' keywords
- Omitting quotes around module name
- Using wrong keyword order
declare module 'math-utils' {
export function add(a: number, b: number): number;
}What will be the output of this TypeScript code?
import { add } from 'math-utils';
console.log(add(2, 3));Solution
Step 1: Understand what declare module does
It only tells TypeScript about types but does not provide actual implementation.Step 2: Analyze runtime behavior
Since no real code exists for 'math-utils', importing and calling add will cause a runtime error because add is undefined.Final Answer:
Runtime error: add is not a function -> Option BQuick Check:
declare module = types only, no code [OK]
- Assuming declare module provides implementation
- Expecting correct output without real code
- Confusing compile-time types with runtime code
declare module myLib {
export const version: string;
}Solution
Step 1: Check module name syntax
Module names must be string literals in quotes, like 'myLib', not bare identifiers.Step 2: Verify export syntax
Exporting constants is allowed, so no error there.Final Answer:
Module name must be in quotes -> Option CQuick Check:
Module names need quotes [OK]
- Omitting quotes around module name
- Thinking export const is invalid
- Assuming function declaration is mandatory
"config" that exports an object with optional properties apiUrl (string) and timeout (number). Which declaration correctly models this?Solution
Step 1: Understand optional properties syntax
Optional properties use the?symbol after the property name.Step 2: Match declaration to requirements
declare module 'config' { export const settings: { apiUrl?: string; timeout?: number }; } correctly declaressettingsas an exported constant object with both properties optional.Step 3: Check other options
declare module 'config' { export const settings: { apiUrl: string; timeout: number }; } requires both properties (not optional). declare module 'config' { export function settings(): { apiUrl?: string; timeout?: number }; } exports a function, not an object. declare module 'config' { export let settings: { apiUrl: string; timeout?: number }; } makesapiUrlrequired, which is incorrect.Final Answer:
declare module 'config' { export const settings: { apiUrl?: string; timeout?: number }; } -> Option AQuick Check:
Optional props use ? in type declarations [OK]
- Forgetting ? for optional properties
- Using function instead of object export
- Making required properties when optional needed
Ready to prove it?
Pass the test and this pattern moves unknown
