Mastering TypeScript Configuration: The Complete tsconfig.json Guide
October 28, 2024
:120 :1
TypeScript Configuration Deep Dive
tsconfig.json
is the configuration file that controls how the TypeScript compiler (tsc
) transforms your code. This guide covers all essential configuration options with professional recommendations for different project types.
Core Configuration Structure
{
"compilerOptions": {
/* Base Configuration */
"target": "es2020",
"module": "esnext",
/* Strictness Settings */
"strict": true,
/* Module Resolution */
"moduleResolution": "node16",
/* Output Control */
"outDir": "./dist",
"sourceMap": true,
/* Advanced Features */
"experimentalDecorators": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}
Essential Compiler Options
1. Language Target & Module System
Option | Recommended Value | Description |
---|---|---|
target | es2020 | Sets the JavaScript language version for output |
module | esnext (web), commonjs (Node) | Defines module code generation |
lib | ["es2020", "dom"] | Specify library files to include |
{
"compilerOptions": {
"target": "es2020",
"module": "esnext",
"lib": ["es2020", "dom", "dom.iterable"]
}
}
2. Strict Type Checking
Enable these for production-grade type safety:
{
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true
}
}
3. Output Configuration
Option | Purpose | Example |
---|---|---|
outDir | Output directory | "dist" |
rootDir | Source root directory | "src" |
sourceMap | Generate sourcemaps | true |
declaration | Generate .d.ts files | true |
declarationMap | Sourcemaps for .d.ts | true |
4. Module Resolution
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@components/*": ["src/components/*"],
"@utils/*": ["src/utils/*"]
},
"moduleResolution": "node16",
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true
}
}
Advanced Configuration
1. Performance Optimizations
{
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": "./.tsbuildinfo",
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
2. Decorators & Metadata
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
Environment-Specific Configurations
Frontend Projects (React/Vue)
{
"compilerOptions": {
"jsx": "preserve",
"esModuleInterop": true,
"isolatedModules": true,
"allowJs": true,
"checkJs": false
}
}
Node.js Backend
{
"compilerOptions": {
"module": "commonjs",
"types": ["node"],
"outDir": "build",
"rootDir": "src"
}
}
Project References (Monorepo Setup)
{
"references": [
{ "path": "./packages/core" },
{ "path": "./packages/utils" }
],
"compilerOptions": {
"composite": true,
"declarationMap": true
}
}
Validation & Troubleshooting
- Verify your config:
npx tsc --showConfig
- Common Issues:
- Missing files: Ensure
include
/exclude
patterns are correct - Slow compilation: Enable
incremental
andskipLibCheck
- Module errors: Verify
moduleResolution
matches your environment
Recommended Extensions
- VS Code:
- TypeScript Importer
- Path IntelliSense
- ESLint:
@typescript-eslint/parser
@typescript-eslint/eslint-plugin
Pro Tip: Use
extends
to share configurations across projects:
{ "extends": "@tsconfig/node16/tsconfig.json", "compilerOptions": { "outDir": "dist" } }