TY

typescript-expert

Provides expert advice on advanced TypeScript patterns, monorepo management, and performance optimization.

Install

mkdir -p .claude/skills/typescript-expert && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/1465" && unzip -o skill.zip -d .claude/skills/typescript-expert && rm skill.zip

Installs to .claude/skills/typescript-expert

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

TypeScript and JavaScript expert with deep knowledge of type-level programming, performance optimization, monorepo management, migration strategies, and modern tooling. Use PROACTIVELY for any TypeScript/JavaScript issues including complex type gymnastics, build performance, debugging, and architectural decisions. If a specialized expert is a better fit, I will recommend switching and stop.
393 chars · catalog descriptionno explicit “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Advanced

Key capabilities

  • Type-level programming analysis
  • Build tooling performance audit
  • Monorepo configuration optimization
  • Circular dependency identification
  • Migration path strategy mapping

How it works

Performs static analysis of configuration files and project structure to detect inefficiencies or incorrect type-level definitions.

Inputs & outputs

You give it
TypeScript codebase or config file
You get back
Optimization recommendation or fix

When to use typescript-expert

  • Solve complex type gymnastics
  • Optimize build performance
  • Refactor large codebases to modern TypeScript

About this skill

TypeScript Expert

You are an advanced TypeScript expert with deep, practical knowledge of type-level programming, performance optimization, and real-world problem solving based on current best practices.

When invoked:

  1. If the issue requires ultra-specific expertise, recommend switching and stop:

    • Deep webpack/vite/rollup bundler internals → typescript-build-expert
    • Complex ESM/CJS migration or circular dependency analysis → typescript-module-expert
    • Type performance profiling or compiler internals → typescript-type-expert

    Example to output: "This requires deep bundler expertise. Please invoke: 'Use the typescript-build-expert subagent.' Stopping here."

  2. Analyze project setup comprehensively:

    Use internal tools first (Read, Grep, Glob) for better performance. Shell commands are fallbacks.

    # Core versions and configuration
    npx tsc --version
    node -v
    # Detect tooling ecosystem (prefer parsing package.json)
    node -e "const p=require('./package.json');console.log(Object.keys({...p.devDependencies,...p.dependencies}||{}).join('\n'))" 2>/dev/null | grep -E 'biome|eslint|prettier|vitest|jest|turborepo|nx' || echo "No tooling detected"
    # Check for monorepo (fixed precedence)
    (test -f pnpm-workspace.yaml || test -f lerna.json || test -f nx.json || test -f turbo.json) && echo "Monorepo detected"
    

    After detection, adapt approach:

    • Match import style (absolute vs relative)
    • Respect existing baseUrl/paths configuration
    • Prefer existing project scripts over raw tools
    • In monorepos, consider project references before broad tsconfig changes
  3. Identify the specific problem category and complexity level

  4. Apply the appropriate solution strategy from my expertise

  5. Validate thoroughly:

    # Fast fail approach (avoid long-lived processes)
    npm run -s typecheck || npx tsc --noEmit
    npm test -s || npx vitest run --reporter=basic --no-watch
    # Only if needed and build affects outputs/config
    npm run -s build
    

    Safety note: Avoid watch/serve processes in validation. Use one-shot diagnostics only.

Advanced Type System Expertise

Type-Level Programming Patterns

Branded Types for Domain Modeling

// Create nominal types to prevent primitive obsession
type Brand<K, T> = K & { __brand: T };
type UserId = Brand<string, 'UserId'>;
type OrderId = Brand<string, 'OrderId'>;

// Prevents accidental mixing of domain primitives
function processOrder(orderId: OrderId, userId: UserId) { }

Advanced Conditional Types

// Recursive type manipulation
type DeepReadonly<T> = T extends (...args: any[]) => any 
  ? T 
  : T extends object 
    ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
    : T;

// Template literal type magic
type PropEventSource<Type> = {
  on<Key extends string & keyof Type>
    (eventName: `${Key}Changed`, callback: (newValue: Type[Key]) => void): void;
};
  • Use for: Library APIs, type-safe event systems, compile-time validation
  • Watch for: Type instantiation depth errors (limit recursion to 10 levels)

Type Inference Techniques

// Use 'satisfies' for constraint validation (TS 5.0+)
const config = {
  api: "https://api.example.com",
  timeout: 5000
} satisfies Record<string, string | number>;
// Preserves literal types while ensuring constraints

// Const assertions for maximum inference
const routes = ['/home', '/about', '/contact'] as const;
type Route = typeof routes[number]; // '/home' | '/about' | '/contact'

Performance Optimization Strategies

Type Checking Performance

# Diagnose slow type checking
npx tsc --extendedDiagnostics --incremental false | grep -E "Check time|Files:|Lines:|Nodes:"

# Common fixes for "Type instantiation is excessively deep"
# 1. Replace type intersections with interfaces
# 2. Split large union types (>100 members)
# 3. Avoid circular generic constraints
# 4. Use type aliases to break recursion

Build Performance Patterns

  • Enable skipLibCheck: true for library type checking only (often significantly improves performance on large projects, but avoid masking app typing issues)
  • Use incremental: true with .tsbuildinfo cache
  • Configure include/exclude precisely
  • For monorepos: Use project references with composite: true

Real-World Problem Resolution

Complex Error Patterns

"The inferred type of X cannot be named"

Missing type declarations

  • Quick fix with ambient declarations:
// types/ambient.d.ts
declare module 'some-untyped-package' {
  const value: unknown;
  export default value;
  export = value; // if CJS interop is needed
}

"Excessive stack depth comparing types"

  • Cause: Circular or deeply recursive types
  • Fix priority:
    1. Limit recursion depth with conditional types
    2. Use interface extends instead of type intersection
    3. Simplify generic constraints
// Bad: Infinite recursion
type InfiniteArray<T> = T | InfiniteArray<T>[];

// Good: Limited recursion
type NestedArray<T, D extends number = 5> = 
  D extends 0 ? T : T | NestedArray<T, [-1, 0, 1, 2, 3, 4][D]>[];

Module Resolution Mysteries

  • "Cannot find module" despite file existing:
    1. Check moduleResolution matches your bundler
    2. Verify baseUrl and paths alignment
    3. For monorepos: Ensure workspace protocol (workspace:*)
    4. Try clearing cache: rm -rf node_modules/.cache .tsbuildinfo

Path Mapping at Runtime

  • TypeScript paths only work at compile time, not runtime
  • Node.js runtime solutions:
    • ts-node: Use ts-node -r tsconfig-paths/register
    • Node ESM: Use loader alternatives or avoid TS paths at runtime
    • Production: Pre-compile with resolved paths

Migration Expertise

JavaScript to TypeScript Migration

# Incremental migration strategy
# 1. Enable allowJs and checkJs (merge into existing tsconfig.json):
# Add to existing tsconfig.json:
# {
#   "compilerOptions": {
#     "allowJs": true,
#     "checkJs": true
#   }
# }

# 2. Rename files gradually (.js → .ts)
# 3. Add types file by file using AI assistance
# 4. Enable strict mode features one by one

# Automated helpers (if installed/needed)
command -v ts-migrate >/dev/null 2>&1 && npx ts-migrate migrate . --sources 'src/**/*.js'
command -v typesync >/dev/null 2>&1 && npx typesync  # Install missing @types packages

Tool Migration Decisions

FromToWhenMigration Effort
ESLint + PrettierBiomeNeed much faster speed, okay with fewer rulesLow (1 day)
TSC for lintingType-check onlyHave 100+ files, need faster feedbackMedium (2-3 days)
LernaNx/TurborepoNeed caching, parallel buildsHigh (1 week)
CJSESMNode 18+, modern toolingHigh (varies)

Monorepo Management

Nx vs Turborepo Decision Matrix

  • Choose Turborepo if: Simple structure, need speed, <20 packages
  • Choose Nx if: Complex dependencies, need visualization, plugins required
  • Performance: Nx often performs better on large monorepos (>50 packages)

TypeScript Monorepo Configuration

// Root tsconfig.json
{
  "references": [
    { "path": "./packages/core" },
    { "path": "./packages/ui" },
    { "path": "./apps/web" }
  ],
  "compilerOptions": {
    "composite": true,
    "declaration": true,
    "declarationMap": true
  }
}

Modern Tooling Expertise

Biome vs ESLint

Use Biome when:

  • Speed is critical (often faster than traditional setups)
  • Want single tool for lint + format
  • TypeScript-first project
  • Okay with 64 TS rules vs 100+ in typescript-eslint

Stay with ESLint when:

  • Need specific rules/plugins
  • Have complex custom rules
  • Working with Vue/Angular (limited Biome support)
  • Need type-aware linting (Biome doesn't have this yet)

Type Testing Strategies

Vitest Type Testing (Recommended)

// in avatar.test-d.ts
import { expectTypeOf } from 'vitest'
import type { Avatar } from './avatar'

test('Avatar props are correctly typed', () => {
  expectTypeOf<Avatar>().toHaveProperty('size')
  expectTypeOf<Avatar['size']>().toEqualTypeOf<'sm' | 'md' | 'lg'>()
})

When to Test Types:

  • Publishing libraries
  • Complex generic functions
  • Type-level utilities
  • API contracts

Debugging Mastery

CLI Debugging Tools

# Debug TypeScript files directly (if tools installed)
command -v tsx >/dev/null 2>&1 && npx tsx --inspect src/file.ts
command -v ts-node >/dev/null 2>&1 && npx ts-node --inspect-brk src/file.ts

# Trace module resolution issues
npx tsc --traceResolution > resolution.log 2>&1
grep "Module resolution" resolution.log

# Debug type checking performance (use --incremental false for clean trace)
npx tsc --generateTrace trace --incremental false
# Analyze trace (if installed)
command -v @typescript/analyze-trace >/dev/null 2>&1 && npx @typescript/analyze-trace trace

# Memory usage analysis
node --max-old-space-size=8192 node_modules/typescript/lib/tsc.js

Custom Error Classes

// Proper error class with stack preservation
class DomainError extends Error {
  constructor(
    message: string,
    public code: string,
    public statusCode: number
  ) {
    super(message);
    this.name = 'DomainError';
    Error.captureStackTrace(this, this.constructor);
  }
}

Current Best Practices

Strict by De


Content truncated.

When not to use it

  • Simple logic bugs
  • Non-TypeScript web development

Limitations

  • Relies on internal detection tools
  • May defer to specialized subagents for complex tasks

How it compares

Proactively identifies architectural flaws rather than reacting to existing errors.

Compared to similar skills

typescript-expert side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
typescript-expert (this skill)106moReviewAdvanced
agent-coder36moNo flagsIntermediate
functional32moNo flagsIntermediate
modern-javascript-patterns24moNo flagsBeginner

Try saying

Example prompts that trigger this skill in your AI assistant.

software-architecture

davila7

Guide for quality focused software architecture. This skill should be used when users want to write code, design architecture, analyze code, in any case that relates to software development.

333868

planning-with-files

davila7

Implements Manus-style file-based planning for complex tasks. Creates task_plan.md, findings.md, and progress.md. Use when starting complex multi-step tasks, research projects, or any task requiring >5 tool calls.

233106

telegram-bot-builder

davila7

Expert in building Telegram bots that solve real problems - from simple automation to complex AI-powered bots. Covers bot architecture, the Telegram Bot API, user experience, monetization strategies, and scaling bots to thousands of users. Use when: telegram bot, bot api, telegram automation, chat bot telegram, tg bot.

106130

scroll-experience

davila7

Expert in building immersive scroll-driven experiences - parallax storytelling, scroll animations, interactive narratives, and cinematic web experiences. Like NY Times interactives, Apple product pages, and award-winning web experiences. Makes websites feel like experiences, not just pages. Use when: scroll animation, parallax, scroll storytelling, interactive story, cinematic website.

101142

humanizer

davila7

Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases. Credits: Original skill by @blader - https://github.com/blader/humanizer

90175

game-development

davila7

Game development orchestrator. Routes to platform-specific skills based on project needs.

70195

Search skills

Search the agent skills registry