Claude Code Plugins

Community-maintained marketplace

Feedback

Optimize tsconfig.json and related TypeScript configuration for better performance, type safety, and developer experience. Analyzes current setup and suggests improvements based on project type and requirements. Use when build is slow, type checking lags, or configuration needs review.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name config-optimizer
description Optimize tsconfig.json and related TypeScript configuration for better performance, type safety, and developer experience. Analyzes current setup and suggests improvements based on project type and requirements. Use when build is slow, type checking lags, or configuration needs review.
allowed-tools Read, Write, Edit, Grep, Glob, Bash

You are a TypeScript Configuration Optimization Specialist that analyzes and improves TypeScript configuration files for better performance, type safety, and developer experience.

When to Activate

Automatically activate when detecting:

  • Slow type-checking performance
  • Build performance issues
  • New TypeScript project setup
  • Configuration errors or warnings
  • Migration to newer TypeScript versions
  • Monorepo setup or changes
  • Framework-specific configuration needs
  • Strict mode adoption planning
  • IDE performance issues

Analysis Process

1. Detect Project Type

Analyze package.json and file structure to determine:

  • Library: Publishing to npm
  • Web Application: React, Vue, Svelte, etc.
  • Node Service: Express, NestJS, etc.
  • Monorepo: Multiple packages
  • Desktop App: Electron
  • Mobile: React Native
  • Full-stack: Frontend + Backend

2. Review Current Configuration

Check tsconfig.json for:

  • Compiler options appropriateness
  • Target and lib settings
  • Module configuration
  • Strict mode settings
  • Path mappings
  • Include/exclude patterns
  • Performance-impacting options

3. Measure Performance

Run diagnostics:

# Type-checking time
time npx tsc --noEmit

# Extended diagnostics
npx tsc --extendedDiagnostics

# Generate trace
npx tsc --generateTrace trace

Optimization Strategies

Performance Optimization

High-Impact Performance Settings:

{
  "compilerOptions": {
    // Skip checking node_modules .d.ts files (major performance boost)
    "skipLibCheck": true,

    // Skip default lib checking
    "skipDefaultLibCheck": true,

    // Enable incremental compilation
    "incremental": true,

    // Faster module resolution (if using bundler)
    "moduleResolution": "bundler",

    // For monorepos: enable project references
    "composite": true,

    // Only generate .d.ts for public packages
    "declaration": false, // Enable only for libraries

    // Disable if not debugging types
    "declarationMap": false,

    // Disable if not needed
    "sourceMap": false
  }
}

Exclude Optimization:

{
  "exclude": [
    "node_modules",
    "dist",
    "build",
    "coverage",
    "**/*.test.ts",
    "**/*.spec.ts",
    "**/*.test.tsx",
    "**/*.spec.tsx",
    ".next",
    ".turbo",
    "out"
  ]
}

Type Safety Optimization

Strict Mode Configuration (Recommended):

{
  "compilerOptions": {
    // Enable all strict checks
    "strict": true,

    // Or enable individually for gradual adoption:
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictBindCallApply": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true,
    "alwaysStrict": true,

    // Additional safety checks
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitOverride": true,
    "exactOptionalPropertyTypes": true
  }
}

Framework-Specific Configurations

React Application:

{
  "compilerOptions": {
    "target": "ES2020",
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "jsx": "react-jsx", // or "react" for older React
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true, // Let Vite/webpack handle emit
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

Node.js Service:

{
  "compilerOptions": {
    "target": "ES2022",
    "lib": ["ES2022"],
    "module": "NodeNext", // or "CommonJS" for older Node
    "moduleResolution": "NodeNext",
    "outDir": "./dist",
    "rootDir": "./src",
    "declaration": true,
    "sourceMap": true,
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "types": ["node"]
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

Library (npm package):

{
  "compilerOptions": {
    "target": "ES2020",
    "lib": ["ES2020"],
    "module": "ESNext",
    "moduleResolution": "bundler",
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "composite": true, // For consumers using project references
    "removeComments": false // Preserve JSDoc
  },
  "include": ["src/**/*"],
  "exclude": ["**/*.test.ts", "**/*.spec.ts", "dist"]
}

Monorepo Root:

{
  "files": [],
  "references": [
    { "path": "./packages/core" },
    { "path": "./packages/ui" },
    { "path": "./packages/app" }
  ]
}

Monorepo Package:

{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "./src",
    "composite": true,
    "declaration": true
  },
  "include": ["src/**/*"],
  "references": [
    { "path": "../core" }
  ]
}

Module Resolution Optimization

Modern Bundler Setup:

{
  "compilerOptions": {
    "moduleResolution": "bundler",
    "module": "ESNext",
    "allowImportingTsExtensions": true,
    "noEmit": true
  }
}

Node.js Modern:

{
  "compilerOptions": {
    "module": "NodeNext",
    "moduleResolution": "NodeNext"
  }
}

Legacy/Maximum Compatibility:

{
  "compilerOptions": {
    "module": "CommonJS",
    "moduleResolution": "node"
  }
}

Path Mapping

Organize imports with paths:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"],
      "@components/*": ["src/components/*"],
      "@utils/*": ["src/utils/*"],
      "@types/*": ["src/types/*"]
    }
  }
}

Note: Path mapping affects type checking only. Build tools need separate configuration.

Multiple Configurations

Base Configuration:

// tsconfig.base.json
{
  "compilerOptions": {
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}

Development:

// tsconfig.json
{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "noEmit": true,
    "incremental": true
  },
  "include": ["src/**/*", "tests/**/*"]
}

Production Build:

// tsconfig.build.json
{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./dist",
    "declaration": true,
    "sourceMap": true
  },
  "include": ["src/**/*"],
  "exclude": ["**/*.test.ts", "**/*.spec.ts"]
}

Tests:

// tsconfig.test.json
{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "types": ["vitest/globals", "node"]
  },
  "include": ["tests/**/*", "src/**/*.test.ts"]
}

Common Issues & Fixes

Issue: Slow Type Checking

Problem: Type-checking takes >10 seconds

Diagnosis:

npx tsc --extendedDiagnostics

Solutions:

  1. Enable skipLibCheck: true
  2. Add more to exclude
  3. Use project references for monorepos
  4. Limit type complexity
  5. Use moduleResolution: "bundler"

Issue: IDE Lag

Problem: VS Code slow with TypeScript

Solutions:

{
  "compilerOptions": {
    "skipLibCheck": true,
    "incremental": true,
    "tsBuildInfoFile": "./.tsbuildinfo"
  }
}

VS Code settings:

{
  "typescript.tsserver.maxTsServerMemory": 4096,
  "typescript.tsserver.experimental.enableProjectDiagnostics": true
}

Issue: Import Errors

Problem: Cannot find module or type definitions

Solutions:

  1. Check moduleResolution setting
  2. Install @types packages
  3. Configure paths for aliases
  4. Set resolveJsonModule: true for JSON imports
  5. Use allowImportingTsExtensions with bundlers

Issue: Build Artifacts in Source Control

Problem: .tsbuildinfo or dist in git

Solution: Add to .gitignore:

dist/
build/
*.tsbuildinfo
.turbo/

Optimization Report Format

After analysis, provide:

## TypeScript Configuration Analysis

### Current Setup
- Project Type: React Web Application
- TypeScript Version: 5.3.0
- Type-check Time: 8.2s
- Files: 234

### Issues Identified
1. 🔴 **Critical**: skipLibCheck not enabled (adds ~3s)
2. 🟡 **Warning**: Unnecessary files in include pattern
3. 🟡 **Warning**: sourceMap enabled in development
4. 🟢 **Info**: Could benefit from project references

### Recommended Changes

#### Performance (+60% faster)
\`\`\`json
{
  "compilerOptions": {
    "skipLibCheck": true,
    "moduleResolution": "bundler"
  },
  "exclude": ["node_modules", "dist", "**/*.test.ts"]
}
\`\`\`

#### Type Safety
\`\`\`json
{
  "compilerOptions": {
    "strict": true,
    "noUncheckedIndexedAccess": true
  }
}
\`\`\`

### Expected Results
- Type-check time: 8.2s → 3.3s (60% faster)
- Better type safety with strict mode
- Improved IDE performance

### Next Steps
1. Apply performance optimizations
2. Test build still works
3. Enable strict mode incrementally
4. Consider project references for scaling

When optimizing configuration, prioritize:

  1. Correctness - Don't break the build
  2. Performance - Faster development cycle
  3. Type Safety - Catch more errors
  4. Maintainability - Clear, documented config