🧩 1. What Are Modules?
Modules allow you to split code into separate files and reuse functionality.
- Each file is a module.
 - Modules can export values (variables, functions, classes) and import them in other files.
 
Benefits:
- Better code organization
 - Avoid global scope pollution
 - Reusable and maintainable code
 
🟢 2. Exporting
🔹 Named Exports
You can export multiple things from a module by name.
// utils.ts
export const PI = 3.14;
export function add(a: number, b: number): number {
  return a + b;
}
export class Calculator {
  multiply(a: number, b: number) {
    return a * b;
  }
}
- Each export must be imported with the same name.
 
🔹 Default Export
A module can have one default export, usually the “main thing” from that module.
// math.ts
export default function subtract(a: number, b: number) {
  return a - b;
}
🟡 3. Importing
🔹 Named Imports
import { PI, add, Calculator } from "./utils";
console.log(PI);         // 3.14
console.log(add(2, 3)); // 5
const calc = new Calculator();
console.log(calc.multiply(3, 4)); // 12
- Must match the exported names.
 
🔹 Default Import
import subtract from "./math";
console.log(subtract(10, 4)); // 6
🔹 Renaming Imports
import { add as sum } from "./utils";
console.log(sum(5, 5)); // 10
🔹 Import Everything as an Object
import * as Utils from "./utils";
console.log(Utils.PI);          // 3.14
console.log(Utils.add(2, 3));  // 5
🔵 4. Combining Default and Named Exports
// module.ts
export const name = "Alice";
export default function greet() {
  console.log("Hello!");
}
// main.ts
import greet, { name } from "./module";
greet(); // Hello!
console.log(name); // Alice
🟣 5. TypeScript-Specific Notes
- TypeScript supports type-only exports:
 
// types.ts
export type User = { id: number; name: string };
// main.ts
import type { User } from "./types";
const u: User = { id: 1, name: "Alice" };
import typeensures types are removed from compiled JS, reducing bundle size.
🟤 6. Relative vs Absolute Paths
- Relative path: 
./utils(current folder),../utils(parent folder) - Absolute path: Can configure 
tsconfig.jsonbaseUrlorpaths 
// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": "./src",
    "paths": {
      "@utils/*": ["utils/*"]
    }
  }
}
import { add } from "@utils/helpers";
⚡ 7. Best Practices
- Prefer named exports for reusable utilities.
 - Use default exports for “main” functionality per file.
 - Keep related exports together in one module.
 - Use type-only exports in TypeScript for better tree-shaking.
 - Use clear folder structure:
 
src/
 ├─ utils/
 │   ├─ math.ts
 │   └─ string.ts
 └─ components/
     └─ Button.tsx
🔹 Quick Example
// mathUtils.ts
export const add = (a: number, b: number) => a + b;
export const subtract = (a: number, b: number) => a - b;
// app.ts
import { add, subtract } from "./mathUtils";
console.log(add(5, 3));       // 8
console.log(subtract(5, 3));  // 2
