Lab 09: Modules & Paths

Time: 30 minutes | Level: Practitioner | Docker: docker run -it --rm node:20-alpine sh

Module resolution strategies, path aliases, barrel files, declaration files (.d.ts), @types packages, triple-slash directives.


Step 1: Setup

docker run -it --rm node:20-alpine sh
npm install -g typescript ts-node
mkdir /lab09 && cd /lab09
cat > tsconfig.json << 'EOF'
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "moduleResolution": "node",
    "strict": true,
    "esModuleInterop": true,
    "baseUrl": ".",
    "paths": {
      "@utils/*": ["src/utils/*"],
      "@models/*": ["src/models/*"]
    },
    "rootDir": ".",
    "outDir": "dist"
  }
}
EOF
mkdir -p src/utils src/models

Step 2: Module Resolution Strategies


Step 3: Barrel Files (index.ts)


Step 4: Path Aliases


Step 5: Declaration Files (.d.ts)


Step 6: @types Packages


Step 7: Triple-Slash Directives


Step 8: Capstone — Module System Demo

📸 Verified Output:


Summary

Concept
Description
Config

moduleResolution: "node"

CommonJS/ts-node compatible

Default for most projects

moduleResolution: "bundler"

Vite/webpack/esbuild

TS 5.0+

moduleResolution: "NodeNext"

Native Node.js ESM

Needs .js extensions

Barrel file

index.ts re-exporting

export * from './file'

Path aliases

@utils/* shorthand

"paths" in tsconfig

Declaration file

.d.ts

Types for JS files

@types

npm install @types/X

Community type declarations

Triple-slash

/// <reference>

Legacy compiler hints

Last updated