mcpField
T
typescript-strict

typescript-strict

github.com/laurigatesDevelopment5947 installsUpdated today
Repository

About typescript-strict

A configuration guide for TypeScript developers covering strict type checking, module resolution, and modern import syntax. It includes recommended tsconfig.json options and commands for checking configurations and errors.

Key features

  1. 01Strict type-checking options
  2. 02Recommended tsconfig.json setup
  3. 03Bundler and NodeNext resolution
  4. 04verbatimModuleSyntax import rules
  5. 05Commands for checking TypeScript

Use cases

  1. 01Set up strict checking in a new project
  2. 02Choose module resolution for a project
  3. 03Check configuration and type errors

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/laurigates/claude-plugins --skill typescript-strict

After installing, type/typescript-strictin Claude Code to confirm it loaded.

Bundled filesREFERENCE.md

Details

From the project README

TypeScript Strict Mode

Modern TypeScript configuration with strict type checking for maximum safety and developer experience. This guide focuses on TypeScript 5.x best practices for 2025.

Core Expertise

What is Strict Mode?

  • Type safety: Catch more bugs at compile time
  • Better IDE experience: Improved autocomplete and refactoring
  • Maintainability: Self-documenting code with explicit types
  • Modern defaults: Align with current TypeScript best practices

Key Capabilities

  • Strict null checking
  • Strict function types
  • No implicit any
  • No unchecked indexed access
  • Proper module resolution
  • Modern import/export syntax enforcement

Recommended tsconfig.json (2025)

Minimal Production Setup
{
  "compilerOptions": {
    // Type Checking
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitOverride": true,
    "noPropertyAccessFromIndexSignature": true,
    "noFallthroughCasesInSwitch": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,

    // Modules
    "module": "ESNext",
    "moduleResolution": "Bundler",
    "resolveJsonModule": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": false,
    "verbatimModuleSyntax": true,

    // Emit
    "target": "ES2022",
    "lib": ["ES2023", "DOM", "DOM.Iterable"],
    "outDir": "dist",
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "removeComments": false,
    "noEmit": false,

    // Interop
    "isolatedModules": true,
    "allowJs": false,
    "checkJs": false,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist", "build"]
}

Strict Flags Explained

strict: true (Umbrella Flag)

Enables all strict type-checking options:

{
  "strict": true
  // Equivalent to:
  // "noImplicitAny": true,
  // "strictNullChecks": true,
  // "strictFunctionTypes": true,
  // "strictBindCallApply": true,
  // "strictPropertyInitialization": true,
  // "noImplicitThis": true,
  // "alwaysStrict": true
}

Always enable strict: true for new projects.

Additional Strict Flags (Recommended for 2025)
FlagPurpose
noUncheckedIndexedAccessIndex signatures return T | undefined instead of T
noImplicitOverrideRequire override keyword for overridden methods
noPropertyAccessFromIndexSignatureForce bracket notation for index signatures
noFallthroughCasesInSwitchPrevent fallthrough in switch statements
exactOptionalPropertyTypesOptional properties cannot be set to undefined explicitly
noUncheckedIndexedAccess (Essential)
// With noUncheckedIndexedAccess
const users: Record<string, User> = {};
const user = users['john'];
// Type: User | undefined (correct - must check before use)

if (user) {
  console.log(user.name); // Type narrowed to User
}

Always enable this flag to prevent runtime errors.

Module Resolution

Choosing a Strategy
StrategyUse ForExtensions Required
BundlerVite, Webpack, Bun projectsNo
NodeNextNode.js libraries and serversYes (.js)
moduleResolution: "Bundler" (Vite/Bun)
{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "Bundler"
  }
}
  • No file extensions required in imports
  • JSON imports without assertions
  • Package.json exports field support
moduleResolution: "NodeNext" (Node.js)
{
  "compilerOptions": {
    "module": "NodeNext",
    "moduleResolution": "NodeNext"
  }
}
  • Respects package.json type: "module"
  • Requires explicit .js extensions (even for .ts files)
  • Supports conditional exports

verbatimModuleSyntax (Recommended for 2025)

Prevents TypeScript from rewriting imports/exports.

{
  "compilerOptions": {
    "verbatimModuleSyntax": true
  }
}
// Error: 'User' is a type and must be imported with 'import type'
import { User } from './types';

// Correct
import type { User } from './types';

// Correct (mixed import)
import { fetchUser, type User } from './api';

Replaces deprecated importsNotUsedAsValues and preserveValueImports.

Agentic Optimizations

ContextCommand
Check errorsbunx tsc --noEmit
Check single filebunx tsc --noEmit src/utils.ts
Show configbunx tsc --showConfig
Check module resolutionbunx tsc --showConfig | grep moduleResolution

Quick Reference

Recommended Flags
FlagValueCategory
stricttrueType Checking
noUncheckedIndexedAccesstrueType Checking
noImplicitOverridetrueType Checking
noPropertyAccessFromIndexSignaturetrueType Checking
noFallthroughCasesInSwitchtrueType Checking
moduleESNext / NodeNextModules
moduleResolutionBundler / NodeNextModules
verbatimModuleSyntaxtrueModules
targetES2022Emit
libadd "ESNext" (TS 6.0+) for Temporal types; see typescript-temporalType Checking
isolatedModulestrueInterop
skipLibChecktrueInterop

For detailed examples, advanced patterns, and best practices, see REFERENCE.md.

References

Comments

Markdown supported