Declaring modules helps TypeScript understand code from files or libraries that don't have built-in type information. It tells TypeScript what to expect so your program works smoothly.
Declaring modules in Typescript
declare module 'module-name' { // type declarations here export function example(): void; }
The declare module keyword tells TypeScript about a module without defining its code.
Inside the block, you describe the types, functions, or variables the module exports.
greet that takes a string and returns a string.declare module 'my-library' { export function greet(name: string): string; }
declare module '*.json' { const value: any; export default value; }
declare module 'cool-styles.css' { const styles: { [className: string]: string }; export default styles; }
Here, we declare a module 'greet' with a function sayHello. Then we import and use it in app.ts. This helps TypeScript know the types even if the actual module code is JavaScript or missing.
/* file: greet.d.ts */ declare module 'greet' { export function sayHello(name: string): string; } /* file: app.ts */ import { sayHello } from 'greet'; console.log(sayHello('Alice'));
Declaration files usually have the extension .d.ts.
Declaring modules does not create code; it only tells TypeScript about types.
If you have real JavaScript code for the module, make sure it matches your declarations.
Use declare module to tell TypeScript about modules without type info.
This helps avoid errors and enables type checking when using JavaScript or unknown modules.
Declaration files describe the shape of the module but do not contain actual code.
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
