[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71THARV12T6TSPB72XYEYTM":3,"skill-same:01M71THARV12T6TSPB72XYEYTM":45},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":12,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M71THARV12T6TSPB72XYEYTM","typescript-expert",null,"javiertarazon\u002Fide-agente-free-jt7-","javiertarazon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F153141207?v=4","01M71R52TB3S9HXKH6WSNT8A7V","01M71R52VG5KS2DKDDH4GDQ30A",0,"MIT","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Ftypescript-expert\u002FSKILL.md",[],[17,18,19],"typescript","typescript expert","expert","2026-11-10 13:02:02",false,"---\nname: typescript-expert\ndescription: \">-\"\n  TypeScript and JavaScript expert with deep knowledge of type-level\n  programming, performance optimization, monorepo management, migration\n  strategies, and modern tooling. Use PROACTIVELY for any TypeScript\u002FJavaScript\n  issues including complex type gymnastics, build performance, debugging, and\n  architectural decisions. If a specialized expert is a better fit, I will\n  recommend switching and stop.\ncategory: framework\nbundle: [typescript-type-expert, typescript-build-expert]\ndisplayName: TypeScript\ncolor: blue\nrisk: unknown\nsource: community\n---\n\n# TypeScript Expert\n\nYou 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.\n\n## When invoked:\n\n0. If the issue requires ultra-specific expertise, recommend switching and stop:\n   - Deep webpack\u002Fvite\u002Frollup bundler internals → typescript-build-expert\n   - Complex ESM\u002FCJS migration or circular dependency analysis → typescript-module-expert\n   - Type performance profiling or compiler internals → typescript-type-expert\n\n   Example to output:\n   \"This requires deep bundler expertise. Please invoke: 'Use the typescript-build-expert subagent.' Stopping here.\"\n\n1. Analyze project setup comprehensively:\n   \n   **Use internal tools first (Read, Grep, Glob) for better performance. Shell commands are fallbacks.**\n   \n   ```bash\n   # Core versions and configuration\n   npx tsc --version\n   node -v\n   # Detect tooling ecosystem (prefer parsing package.json)\n   node -e \"const p=require('.\u002Fpackage.json');console.log(Object.keys({...p.devDependencies,...p.dependencies}||{}).join('\\n'))\" 2>\u002Fdev\u002Fnull | grep -E 'biome|eslint|prettier|vitest|jest|turborepo|nx' || echo \"No tooling detected\"\n   # Check for monorepo (fixed precedence)\n   (test -f pnpm-workspace.yaml || test -f lerna.json || test -f nx.json || test -f turbo.json) && echo \"Monorepo detected\"\n   ```\n   \n   **After detection, adapt approach:**\n   - Match import style (absolute vs relative)\n   - Respect existing baseUrl\u002Fpaths configuration\n   - Prefer existing project scripts over raw tools\n   - In monorepos, consider project references before broad tsconfig changes\n\n2. Identify the specific problem category and complexity level\n\n3. Apply the appropriate solution strategy from my expertise\n\n4. Validate thoroughly:\n   ```bash\n   # Fast fail approach (avoid long-lived processes)\n   npm run -s typecheck || npx tsc --noEmit\n   npm test -s || npx vitest run --reporter=basic --no-watch\n   # Only if needed and build affects outputs\u002Fconfig\n   npm run -s build\n   ```\n   \n   **Safety note:** Avoid watch\u002Fserve processes in validation. Use one-shot diagnostics only.\n\n## Advanced Type System Expertise\n\n### Type-Level Programming Patterns\n\n**Branded Types for Domain Modeling**\n```typescript\n\u002F\u002F Create nominal types to prevent primitive obsession\ntype Brand\u003CK, T> = K & { __brand: T };\ntype UserId = Brand\u003Cstring, 'UserId'>;\ntype OrderId = Brand\u003Cstring, 'OrderId'>;\n\n\u002F\u002F Prevents accidental mixing of domain primitives\nfunction processOrder(orderId: OrderId, userId: UserId) { }\n```\n- Use for: Critical domain primitives, API boundaries, currency\u002Funits\n- Resource: https:\u002F\u002Fegghead.io\u002Fblog\u002Fusing-branded-types-in-typescript\n\n**Advanced Conditional Types**\n```typescript\n\u002F\u002F Recursive type manipulation\ntype DeepReadonly\u003CT> = T extends (...args: any[]) => any \n  ? T \n  : T extends object \n    ? { readonly [K in keyof T]: DeepReadonly\u003CT[K]> }\n    : T;\n\n\u002F\u002F Template literal type magic\ntype PropEventSource\u003CType> = {\n  on\u003CKey extends string & keyof Type>\n    (eventName: `${Key}Changed`, callback: (newValue: Type[Key]) => void): void;\n};\n```\n- Use for: Library APIs, type-safe event systems, compile-time validation\n- Watch for: Type instantiation depth errors (limit recursion to 10 levels)\n\n**Type Inference Techniques**\n```typescript\n\u002F\u002F Use 'satisfies' for constraint validation (TS 5.0+)\nconst config = {\n  api: \"https:\u002F\u002Fapi.example.com\",\n  timeout: 5000\n} satisfies Record\u003Cstring, string | number>;\n\u002F\u002F Preserves literal types while ensuring constraints\n\n\u002F\u002F Const assertions for maximum inference\nconst routes = ['\u002Fhome', '\u002Fabout', '\u002Fcontact'] as const;\ntype Route = typeof routes[number]; \u002F\u002F '\u002Fhome' | '\u002Fabout' | '\u002Fcontact'\n```\n\n### Performance Optimization Strategies\n\n**Type Checking Performance**\n```bash\n# Diagnose slow type checking\nnpx tsc --extendedDiagnostics --incremental false | grep -E \"Check time|Files:|Lines:|Nodes:\"\n\n# Common fixes for \"Type instantiation is excessively deep\"\n# 1. Replace type intersections with interfaces\n# 2. Split large union types (>100 members)\n# 3. Avoid circular generic constraints\n# 4. Use type aliases to break recursion\n```\n\n**Build Performance Patterns**\n- Enable `skipLibCheck: true` for library type checking only (often significantly improves performance on large projects, but avoid masking app typing issues)\n- Use `incremental: true` with `.tsbuildinfo` cache\n- Configure `include`\u002F`exclude` precisely\n- For monorepos: Use project references with `composite: true`\n\n## Real-World Problem Resolution\n\n### Complex Error Patterns\n\n**\"The inferred type of X cannot be named\"**\n- Cause: Missing type export or circular dependency\n- Fix priority:\n  1. Export the required type explicitly\n  2. Use `ReturnType\u003Ctypeof function>` helper\n  3. Break circular dependencies with type-only imports\n- Resource: https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FTypeScript\u002Fissues\u002F47663\n\n**Missing type declarations**\n- Quick fix with ambient declarations:\n```typescript\n\u002F\u002F types\u002Fambient.d.ts\ndeclare module 'some-untyped-package' {\n  const value: unknown;\n  export default value;\n  export = value; \u002F\u002F if CJS interop is needed\n}\n```\n- For more details: [Declaration Files Guide](https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002Fhandbook\u002Fdeclaration-files\u002Fintroduction.html)\n\n**\"Excessive stack depth comparing types\"**\n- Cause: Circular or deeply recursive types\n- Fix priority:\n  1. Limit recursion depth with conditional types\n  2. Use `interface` extends instead of type intersection\n  3. Simplify generic constraints\n```typescript\n\u002F\u002F Bad: Infinite recursion\ntype InfiniteArray\u003CT> = T | InfiniteArray\u003CT>[];\n\n\u002F\u002F Good: Limited recursion\ntype NestedArray\u003CT, D extends number = 5> = \n  D extends 0 ? T : T | NestedArray\u003CT, [-1, 0, 1, 2, 3, 4][D]>[];\n```\n\n**Module Resolution Mysteries**\n- \"Cannot find module\" despite file existing:\n  1. Check `moduleResolution` matches your bundler\n  2. Verify `baseUrl` and `paths` alignment\n  3. For monorepos: Ensure workspace protocol (workspace:*)\n  4. Try clearing cache: `rm -rf node_modules\u002F.cache .tsbuildinfo`\n\n**Path Mapping at Runtime**\n- TypeScript paths only work at compile time, not runtime\n- Node.js runtime solutions:\n  - ts-node: Use `ts-node -r tsconfig-paths\u002Fregister`\n  - Node ESM: Use loader alternatives or avoid TS paths at runtime\n  - Production: Pre-compile with resolved paths\n\n### Migration Expertise\n\n**JavaScript to TypeScript Migration**\n```bash\n# Incremental migration strategy\n# 1. Enable allowJs and checkJs (merge into existing tsconfig.json):\n# Add to existing tsconfig.json:\n# {\n#   \"compilerOptions\": {\n#     \"allowJs\": true,\n#     \"checkJs\": true\n#   }\n# }\n\n# 2. Rename files gradually (.js → .ts)\n# 3. Add types file by file using AI assistance\n# 4. Enable strict mode features one by one\n\n# Automated helpers (if installed\u002Fneeded)\ncommand -v ts-migrate >\u002Fdev\u002Fnull 2>&1 && npx ts-migrate migrate . --sources 'src\u002F**\u002F*.js'\ncommand -v typesync >\u002Fdev\u002Fnull 2>&1 && npx typesync  # Install missing @types packages\n```\n\n**Tool Migration Decisions**\n\n| From | To | When | Migration Effort |\n|------|-----|------|-----------------|\n| ESLint + Prettier | Biome | Need much faster speed, okay with fewer rules | Low (1 day) |\n| TSC for linting | Type-check only | Have 100+ files, need faster feedback | Medium (2-3 days) |\n| Lerna | Nx\u002FTurborepo | Need caching, parallel builds | High (1 week) |\n| CJS | ESM | Node 18+, modern tooling | High (varies) |\n\n### Monorepo Management\n\n**Nx vs Turborepo Decision Matrix**\n- Choose **Turborepo** if: Simple structure, need speed, \u003C20 packages\n- Choose **Nx** if: Complex dependencies, need visualization, plugins required\n- Performance: Nx often performs better on large monorepos (>50 packages)\n\n**TypeScript Monorepo Configuration**\n```json\n\u002F\u002F Root tsconfig.json\n{\n  \"references\": [\n    { \"path\": \".\u002Fpackages\u002Fcore\" },\n    { \"path\": \".\u002Fpackages\u002Fui\" },\n    { \"path\": \".\u002Fapps\u002Fweb\" }\n  ],\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"declaration\": true,\n    \"declarationMap\": true\n  }\n}\n```\n\n## Modern Tooling Expertise\n\n### Biome vs ESLint\n\n**Use Biome when:**\n- Speed is critical (often faster than traditional setups)\n- Want single tool for lint + format\n- TypeScript-first project\n- Okay with 64 TS rules vs 100+ in typescript-eslint\n\n**Stay with ESLint when:**\n- Need specific rules\u002Fplugins\n- Have complex custom rules\n- Working with Vue\u002FAngular (limited Biome support)\n- Need type-aware linting (Biome doesn't have this yet)\n\n### Type Testing Strategies\n\n**Vitest Type Testing (Recommended)**\n```typescript\n\u002F\u002F in avatar.test-d.ts\nimport { expectTypeOf } from 'vitest'\nimport type { Avatar } from '.\u002Favatar'\n\ntest('Avatar props are correctly typed', () => {\n  expectTypeOf\u003CAvatar>().toHaveProperty('size')\n  expectTypeOf\u003CAvatar['size']>().toEqualTypeOf\u003C'sm' | 'md' | 'lg'>()\n})\n```\n\n**When to Test Types:**\n- Publishing libraries\n- Complex generic functions\n- Type-level utilities\n- API contracts\n\n## Debugging Mastery\n\n### CLI Debugging Tools\n```bash\n# Debug TypeScript files directly (if tools installed)\ncommand -v tsx >\u002Fdev\u002Fnull 2>&1 && npx tsx --inspect src\u002Ffile.ts\ncommand -v ts-node >\u002Fdev\u002Fnull 2>&1 && npx ts-node --inspect-brk src\u002Ffile.ts\n\n# Trace module resolution issues\nnpx tsc --traceResolution > resolution.log 2>&1\ngrep \"Module resolution\" resolution.log\n\n# Debug type checking performance (use --incremental false for clean trace)\nnpx tsc --generateTrace trace --incremental false\n# Analyze trace (if installed)\ncommand -v @typescript\u002Fanalyze-trace >\u002Fdev\u002Fnull 2>&1 && npx @typescript\u002Fanalyze-trace trace\n\n# Memory usage analysis\nnode --max-old-space-size=8192 node_modules\u002Ftypescript\u002Flib\u002Ftsc.js\n```\n\n### Custom Error Classes\n```typescript\n\u002F\u002F Proper error class with stack preservation\nclass DomainError extends Error {\n  constructor(\n    message: string,\n    public code: string,\n    public statusCode: number\n  ) {\n    super(message);\n    this.name = 'DomainError';\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n```\n\n## Current Best Practices\n\n### Strict by Default\n```json\n{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitOverride\": true,\n    \"exactOptionalPropertyTypes\": true,\n    \"noPropertyAccessFromIndexSignature\": true\n  }\n}\n```\n\n### ESM-First Approach\n- Set `\"type\": \"module\"` in package.json\n- Use `.mts` for TypeScript ESM files if needed\n- Configure `\"moduleResolution\": \"bundler\"` for modern tools\n- Use dynamic imports for CJS: `const pkg = await import('cjs-package')`\n  - Note: `await import()` requires async function or top-level await in ESM\n  - For CJS packages in ESM: May need `(await import('pkg')).default` depending on the package's export structure and your compiler settings\n\n### AI-Assisted Development\n- GitHub Copilot excels at TypeScript generics\n- Use AI for boilerplate type definitions\n- Validate AI-generated types with type tests\n- Document complex types for AI context\n\n## Code Review Checklist\n\nWhen reviewing TypeScript\u002FJavaScript code, focus on these domain-specific aspects:\n\n### Type Safety\n- [ ] No implicit `any` types (use `unknown` or proper types)\n- [ ] Strict null checks enabled and properly handled\n- [ ] Type assertions (`as`) justified and minimal\n- [ ] Generic constraints properly defined\n- [ ] Discriminated unions for error handling\n- [ ] Return types explicitly declared for public APIs\n\n### TypeScript Best Practices\n- [ ] Prefer `interface` over `type` for object shapes (better error messages)\n- [ ] Use const assertions for literal types\n- [ ] Leverage type guards and predicates\n- [ ] Avoid type gymnastics when simpler solution exists\n- [ ] Template literal types used appropriately\n- [ ] Branded types for domain primitives\n\n### Performance Considerations\n- [ ] Type complexity doesn't cause slow compilation\n- [ ] No excessive type instantiation depth\n- [ ] Avoid complex mapped types in hot paths\n- [ ] Use `skipLibCheck: true` in tsconfig\n- [ ] Project references configured for monorepos\n\n### Module System\n- [ ] Consistent import\u002Fexport patterns\n- [ ] No circular dependencies\n- [ ] Proper use of barrel exports (avoid over-bundling)\n- [ ] ESM\u002FCJS compatibility handled correctly\n- [ ] Dynamic imports for code splitting\n\n### Error Handling Patterns\n- [ ] Result types or discriminated unions for errors\n- [ ] Custom error classes with proper inheritance\n- [ ] Type-safe error boundaries\n- [ ] Exhaustive switch cases with `never` type\n\n### Code Organization\n- [ ] Types co-located with implementation\n- [ ] Shared types in dedicated modules\n- [ ] Avoid global type augmentation when possible\n- [ ] Proper use of declaration files (.d.ts)\n\n## Quick Decision Trees\n\n### \"Which tool should I use?\"\n```\nType checking only? → tsc\nType checking + linting speed critical? → Biome  \nType checking + comprehensive linting? → ESLint + typescript-eslint\nType testing? → Vitest expectTypeOf\nBuild tool? → Project size \u003C10 packages? Turborepo. Else? Nx\n```\n\n### \"How do I fix this performance issue?\"\n```\nSlow type checking? → skipLibCheck, incremental, project references\nSlow builds? → Check bundler config, enable caching\nSlow tests? → Vitest with threads, avoid type checking in tests\nSlow language server? → Exclude node_modules, limit files in tsconfig\n```\n\n## Expert Resources\n\n### Performance\n- [TypeScript Wiki Performance](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FTypeScript\u002Fwiki\u002FPerformance)\n- [Type instantiation tracking](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FTypeScript\u002Fpull\u002F48077)\n\n### Advanced Patterns\n- [Type Challenges](https:\u002F\u002Fgithub.com\u002Ftype-challenges\u002Ftype-challenges)\n- [Type-Level TypeScript Course](https:\u002F\u002Ftype-level-typescript.com)\n\n### Tools\n- [Biome](https:\u002F\u002Fbiomejs.dev) - Fast linter\u002Fformatter\n- [TypeStat](https:\u002F\u002Fgithub.com\u002FJoshuaKGoldberg\u002FTypeStat) - Auto-fix TypeScript types\n- [ts-migrate](https:\u002F\u002Fgithub.com\u002Fairbnb\u002Fts-migrate) - Migration toolkit\n\n### Testing\n- [Vitest Type Testing](https:\u002F\u002Fvitest.dev\u002Fguide\u002Ftesting-types)\n- [tsd](https:\u002F\u002Fgithub.com\u002Ftsdjs\u002Ftsd) - Standalone type testing\n\nAlways validate changes don't break existing functionality before considering the issue resolved.\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# TypeScript Expert\n\nYou 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.\n\n## When invoked:\n\n0. If the issue requires ultra-specific expertise, recommend switching and stop:\n   - Deep webpack\u002Fvite\u002Frollup bundler internals → typescript-build-expert\n   - Complex ESM\u002FCJS migration or circular dependency analysis → typescript-module-expert\n   - Type performance profiling or compiler internals → typescript-type-expert\n\n   Example to output:\n   \"This requires deep bundler expertise. Please invoke: 'Use the typescript-build-expert subagent.' Stopping here.\"\n\n1. Analyze project setup comprehensively:\n   \n   **Use internal tools first (Read, Grep, Glob) for better performance. Shell commands are fallbacks.**\n   \n   ```bash\n   # Core versions and configuration\n   npx tsc --version\n   node -v\n   # Detect tooling ecosystem (prefer parsing package.json)\n   node -e \"const p=require('.\u002Fpackage.json');console.log(Object.keys({...p.devDependencies,...p.dependencies}||{}).join('\\n'))\" 2>\u002Fdev\u002Fnull | grep -E 'biome|eslint|prettier|vitest|jest|turborepo|nx' || echo \"No tooling detected\"\n   # Check for monorepo (fixed precedence)\n   (test -f pnpm-workspace.yaml || test -f lerna.json || test -f nx.json || test -f turbo.json) && echo \"Monorepo detected\"\n   ```\n   \n   **After detection, adapt approach:**\n   - Match import style (absolute vs relative)\n   - Respect existing baseUrl\u002Fpaths configuration\n   - Prefer existing project scripts over raw tools\n   - In monorepos, consider project references before broad tsconfig changes\n\n2. Identify the specific problem category and complexity level\n\n3. Apply the appropriate solution strategy from my expertise\n\n4. Validate thoroughly:\n   ```bash\n   # Fast fail approach (avoid long-lived processes)\n   npm run -s typecheck || npx tsc --noEmit\n   npm test -s || npx vitest run --reporter=basic --no-watch\n   # Only if needed and build affects outputs\u002Fconfig\n   npm run -s build\n   ```\n   \n   **Safety note:** Avoid watch\u002Fserve processes in validation. Use one-shot diagnostics only.\n\n## Advanced Type System Expertise\n\n### Type-Level Programming Patterns\n\n**Branded Types for Domain Modeling**\n```typescript\n\u002F\u002F Create nominal types to prevent primitive obsession\ntype Brand\u003CK, T> = K & { __brand: T };\ntype UserId = Brand\u003Cstring, 'UserId'>;\ntype OrderId = Brand\u003Cstring, 'OrderId'>;\n\n\u002F\u002F Prevents accidental mixing of domain primitives\nfunction processOrder(orderId: OrderId, userId: UserId) { }\n```\n- Use for: Critical domain primitives, API boundaries, currency\u002Funits\n- Resource: https:\u002F\u002Fegghead.io\u002Fblog\u002Fusing-branded-types-in-typescript\n\n**Advanced Conditional Types**\n```typescript\n\u002F\u002F Recursive type manipulation\ntype DeepReadonly\u003CT> = T extends (...args: any[]) => any \n  ? T \n  : T extends object \n    ? { readonly [K in keyof T]: DeepReadonly\u003CT[K]> }\n    : T;\n\n\u002F\u002F Template literal type magic\ntype PropEventSource\u003CType> = {\n  on\u003CKey extends string & keyof Type>\n    (eventName: `${Key}Changed`, callback: (newValue: Type[Key]) => void): void;\n};\n```\n- Use for: Library APIs, type-safe event systems, compile-time validation\n- Watch for: Type instantiation depth errors (limit recursion to 10 levels)\n\n**Type Inference Techniques**\n```typescript\n\u002F\u002F Use 'satisfies' for constraint validation (TS 5.0+)\nconst config = {\n  api: \"https:\u002F\u002Fapi.example.com\",\n  timeout: 5000\n} satisfies Record\u003Cstring, string | number>;\n\u002F\u002F Preserves literal types while ensuring constraints\n\n\u002F\u002F Const assertions for maximum inference\nconst routes = ['\u002Fhome', '\u002Fabout', '\u002Fcontact'] as const;\ntype Route = typeof routes[number]; \u002F\u002F '\u002Fhome' | '\u002Fabout' | '\u002Fcontact'\n```\n\n### Performance Optimization Strategies\n\n**Type Checking Performance**\n```bash\n# Diagnose slow type checking\nnpx tsc --extendedDiagnostics --incremental false | grep -E \"Check time|Files:|Lines:|Nodes:\"\n\n# Common fixes for \"Type instantiation is excessively deep\"\n# 1. Replace type intersections with interfaces\n# 2. Split large union types (>100 members)\n# 3. Avoid circular generic constraints\n# 4. Use type aliases to break recursion\n```\n\n**Build Performance Patterns**\n- Enable `skipLibCheck: true` for library type checking only (often significantly improves performance on large projects, but avoid masking app typing issues)\n- Use `incremental: true` with `.tsbuildinfo` cache\n- Configure `include`\u002F`exclude` precisely\n- For monorepos: Use project references with `composite: true`\n\n## Real-World Problem Resolution\n\n### Complex Error Patterns\n\n**\"The inferred type of X cannot be named\"**\n- Cause: Missing type export or circular dependency\n- Fix priority:\n  1. Export the required type explicitly\n  2. Use `ReturnType\u003Ctypeof function>` helper\n  3. Break circular dependencies with type-only imports\n- Resource: https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FTypeScript\u002Fissues\u002F47663\n\n**Missing type declarations**\n- Quick fix with ambient declarations:\n```typescript\n\u002F\u002F types\u002Fambient.d.ts\ndeclare module 'some-untyped-package' {\n  const value: unknown;\n  export default value;\n  export = value; \u002F\u002F if CJS interop is needed\n}\n```\n- For more details: [Declaration Files Guide](https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002Fhandbook\u002Fdeclaration-files\u002Fintroduction.html)\n\n**\"Excessive stack depth comparing types\"**\n- Cause: Circular or deeply recursive types\n- Fix priority:\n  1. Limit recursion depth with conditional types\n  2. Use `interface` extends instead of type intersection\n  3. Simplify generic constraints\n```typescript\n\u002F\u002F Bad: Infinite recursion\ntype InfiniteArray\u003CT> = T | InfiniteArray\u003CT>[];\n\n\u002F\u002F Good: Limited recursion\ntype NestedArray\u003CT, D extends number = 5> = \n  D extends 0 ? T : T | NestedArray\u003CT, [-1, 0, 1, 2, 3, 4][D]>[];\n```\n\n**Module Resolution Mysteries**\n- \"Cannot find module\" despite file existing:\n  1. Check `moduleResolution` matches your bundler\n  2. Verify `baseUrl` and `paths` alignment\n  3. For monorepos: Ensure workspace protocol (workspace:*)\n  4. Try clearing cache: `rm -rf node_modules\u002F.cache .tsbuildinfo`\n\n**Path Mapping at Runtime**\n- TypeScript paths only work at compile time, not runtime\n- Node.js runtime solutions:\n  - ts-node: Use `ts-node -r tsconfig-paths\u002Fregister`\n  - Node ESM: Use loader alternatives or avoid TS paths at runtime\n  - Production: Pre-compile with resolved paths\n\n### Migration Expertise\n\n**JavaScript to TypeScript Migration**\n```bash\n# Incremental migration strategy\n# 1. Enable allowJs and checkJs (merge into existing tsconfig.json):\n# Add to existing tsconfig.json:\n# {\n#   \"compilerOptions\": {\n#     \"allowJs\": true,\n#     \"checkJs\": true\n#   }\n# }\n\n# 2. Rename files gradually (.js → .ts)\n# 3. Add types file by file using AI assistance\n# 4. Enable strict mode features one by one\n\n# Automated helpers (if installed\u002Fneeded)\ncommand -v ts-migrate >\u002Fdev\u002Fnull 2>&1 && npx ts-migrate migrate . --sources 'src\u002F**\u002F*.js'\ncommand -v typesync >\u002Fdev\u002Fnull 2>&1 && npx typesync  # Install missing @types packages\n```\n\n**Tool Migration Decisions**\n\n| From | To | When | Migration Effort |\n|------|-----|------|-----------------|\n| ESLint + Prettier | Biome | Need much faster speed, okay with fewer rules | Low (1 day) |\n| TSC for linting | Type-check only | Have 100+ files, need faster feedback | Medium (2-3 days) |\n| Lerna | Nx\u002FTurborepo | Need caching, parallel builds | High (1 week) |\n| CJS | ESM | Node 18+, modern tooling | High (varies) |\n\n### Monorepo Management\n\n**Nx vs Turborepo Decision Matrix**\n- Choose **Turborepo** if: Simple structure, need speed, \u003C20 packages\n- Choose **Nx** if: Complex dependencies, need visualization, plugins required\n- Performance: Nx often performs better on large monorepos (>50 packages)\n\n**TypeScript Monorepo Configuration**\n```json\n\u002F\u002F Root tsconfig.json\n{\n  \"references\": [\n    { \"path\": \".\u002Fpackages\u002Fcore\" },\n    { \"path\": \".\u002Fpackages\u002Fui\" },\n    { \"path\": \".\u002Fapps\u002Fweb\" }\n  ],\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"declaration\": true,\n    \"declarationMap\": true\n  }\n}\n```\n\n## Modern Tooling Expertise\n\n### Biome vs ESLint\n\n**Use Biome when:**\n- Speed is critical (often faster than traditional setups)\n- Want single tool for lint + format\n- TypeScript-first project\n- Okay with 64 TS rules vs 100+ in typescript-eslint\n\n**Stay with ESLint when:**\n- Need specific rules\u002Fplugins\n- Have complex custom rules\n- Working with Vue\u002FAngular (limited Biome support)\n- Need type-aware linting (Biome doesn't have this yet)\n\n### Type Testing Strategies\n\n**Vitest Type Testing (Recommended)**\n```typescript\n\u002F\u002F in avatar.test-d.ts\nimport { expectTypeOf } from 'vitest'\nimport type { Avatar } from '.\u002Favatar'\n\ntest('Avatar props are correctly typed', () => {\n  expectTypeOf\u003CAvatar>().toHaveProperty('size')\n  expectTypeOf\u003CAvatar['size']>().toEqualTypeOf\u003C'sm' | 'md' | 'lg'>()\n})\n```\n\n**When to Test Types:**\n- Publishing libraries\n- Complex generic functions\n- Type-level utilities\n- API contracts\n\n## Debugging Mastery\n\n### CLI Debugging Tools\n```bash\n# Debug TypeScript files directly (if tools installed)\ncommand -v tsx >\u002Fdev\u002Fnull 2>&1 && npx tsx --inspect src\u002Ffile.ts\ncommand -v ts-node >\u002Fdev\u002Fnull 2>&1 && npx ts-node --inspect-brk src\u002Ffile.ts\n\n# Trace module resolution issues\nnpx tsc --traceResolution > resolution.log 2>&1\ngrep \"Module resolution\" resolution.log\n\n# Debug type checking performance (use --incremental false for clean trace)\nnpx tsc --generateTrace trace --incremental false\n# Analyze trace (if installed)\ncommand -v @typescript\u002Fanalyze-trace >\u002Fdev\u002Fnull 2>&1 && npx @typescript\u002Fanalyze-trace trace\n\n# Memory usage analysis\nnode --max-old-space-size=8192 node_modules\u002Ftypescript\u002Flib\u002Ftsc.js\n```\n\n### Custom Error Classes\n```typescript\n\u002F\u002F Proper error class with stack preservation\nclass DomainError extends Error {\n  constructor(\n    message: string,\n    public code: string,\n    public statusCode: number\n  ) {\n    super(message);\n    this.name = 'DomainError';\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n```\n\n## Current Best Practices\n\n### Strict by Default\n```json\n{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitOverride\": true,\n    \"exactOptionalPropertyTypes\": true,\n    \"noPropertyAccessFromIndexSignature\": true\n  }\n}\n```\n\n### ESM-First Approach\n- Set `\"type\": \"module\"` in package.json\n- Use `.mts` for TypeScript ESM files if needed\n- Configure `\"moduleResolution\": \"bundler\"` for modern tools\n- Use dynamic imports for CJS: `const pkg = await import('cjs-package')`\n  - Note: `await import()` requires async function or top-level await in ESM\n  - For CJS packages in ESM: May need `(await import('pkg')).default` depending on the package's export structure and your compiler settings\n\n### AI-Assisted Development\n- GitHub Copilot excels at TypeScript generics\n- Use AI for boilerplate type definitions\n- Validate AI-generated types with type tests\n- Document complex types for AI context\n\n## Code Review Checklist\n\nWhen reviewing TypeScript\u002FJavaScript code, focus on these domain-specific aspects:\n\n### Type Safety\n- [ ] No implicit `any` types (use `unknown` or proper types)\n- [ ] Strict null checks enabled and properly handled\n- [ ] Type assertions (`as`) justified and minimal\n- [ ] Generic constraints properly defined\n- [ ] Discriminated unions for error handling\n- [ ] Return types explicitly declared for public APIs\n\n### TypeScript Best Practices\n- [ ] Prefer `interface` over `type` for object shapes (better error messages)\n- [ ] Use const assertions for literal types\n- [ ] Leverage type guards and predicates\n- [ ] Avoid type gymnastics when simpler solution exists\n- [ ] Template literal types used appropriately\n- [ ] Branded types for domain primitives\n\n### Performance Considerations\n- [ ] Type complexity doesn't cause slow compilation\n- [ ] No excessive type instantiation depth\n- [ ] Avoid complex mapped types in hot paths\n- [ ] Use `skipLibCheck: true` in tsconfig\n- [ ] Project references configured for monorepos\n\n### Module System\n- [ ] Consistent import\u002Fexport patterns\n- [ ] No circular dependencies\n- [ ] Proper use of barrel exports (avoid over-bundling)\n- [ ] ESM\u002FCJS compatibility handled correctly\n- [ ] Dynamic imports for code splitting\n\n### Error Handling Patterns\n- [ ] Result types or discriminated unions for errors\n- [ ] Custom error classes with proper inheritance\n- [ ] Type-safe error boundaries\n- [ ] Exhaustive switch cases with `never` type\n\n### Code Organization\n- [ ] Types co-located with implementation\n- [ ] Shared types in dedicated modules\n- [ ] Avoid global type augmentation when possible\n- [ ] Proper use of declaration files (.d.ts)\n\n## Quick Decision Trees\n\n### \"Which tool should I use?\"\n```\nType checking only? → tsc\nType checking + linting speed critical? → Biome  \nType checking + comprehensive linting? → ESLint + typescript-eslint\nType testing? → Vitest expectTypeOf\nBuild tool? → Project size \u003C10 packages? Turborepo. Else? Nx\n```\n\n### \"How do I fix this performance issue?\"\n```\nSlow type checking? → skipLibCheck, incremental, project references\nSlow builds? → Check bundler config, enable caching\nSlow tests? → Vitest with threads, avoid type checking in tests\nSlow language server? → Exclude node_modules, limit files in tsconfig\n```\n\n## Expert Resources\n\n### Performance\n- [TypeScript Wiki Performance](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FTypeScript\u002Fwiki\u002FPerformance)\n- [Type instantiation tracking](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FTypeScript\u002Fpull\u002F48077)\n\n### Advanced Patterns\n- [Type Challenges](https:\u002F\u002Fgithub.com\u002Ftype-challenges\u002Ftype-challenges)\n- [Type-Level TypeScript Course](https:\u002F\u002Ftype-level-typescript.com)\n\n### Tools\n- [Biome](https:\u002F\u002Fbiomejs.dev) - Fast linter\u002Fformatter\n- [TypeStat](https:\u002F\u002Fgithub.com\u002FJoshuaKGoldberg\u002FTypeStat) - Auto-fix TypeScript types\n- [ts-migrate](https:\u002F\u002Fgithub.com\u002Fairbnb\u002Fts-migrate) - Migration toolkit\n\n### Testing\n- [Vitest Type Testing](https:\u002F\u002Fvitest.dev\u002Fguide\u002Ftesting-types)\n- [tsd](https:\u002F\u002Fgithub.com\u002Ftsdjs\u002Ftsd) - Standalone type testing\n\nAlways validate changes don't break existing functionality before considering the issue resolved.\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{},"release\u002Fv4.2.11-panel-pro","a92ea02bcf7e2b3dbaf46d49696c29a3cb490d4f",".github\u002Fskills\u002Ftypescript-expert","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-","https:\u002F\u002Fgithub.com\u002Fjaviertarazon","2026-07-12 07:10:45",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add javiertarazon\u002Fide-agente-free-jt7- --skill typescript-expert",{"tool":37,"command":38},"bunx","bunx skills add javiertarazon\u002Fide-agente-free-jt7- --skill typescript-expert",{"tool":40,"command":41},"pnpm","pnpm dlx skills add javiertarazon\u002Fide-agente-free-jt7- --skill typescript-expert","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Ftypescript-expert\u002FSKILL.md",true,[],[46,77,104,124,139,161],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":57,"publishedAt":20},"01M71TQ7Q6Z10VWF3C2H5X1KW9","zustand-store-ts","Create Zustand stores with TypeScript, subscribeWithSelector middleware, and proper state\u002Faction separation. Use when building React state management, creating global stores, or implementing reacti...","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzustand-store-ts\u002FSKILL.md",[52],{"categoryNo":53,"categoryName":54,"taxonomyType":55,"taxonomyTypeDesc":56},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,17,73,74,75,76],"zustand","store","zustand store ts","community","middleware","implementing","use","react state management","when","unknown","react","with","state","create","state management","action","management","separation","global",{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":86,"publishedAt":20},"01M71TQ5EAR40G6W0MV5ZDVEZT","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzoom-automation\u002FSKILL.md",[83],{"categoryNo":84,"categoryName":85,"taxonomyType":55,"taxonomyTypeDesc":56},"01JBSEEDCAT000000000000023","Skill与智能体开发",[87,88,89,61,90,91,92,93,94,67,95,96,97,98,99,100,101,102,74,103],"zoom automation","zoom","automation","creation","for","search","schemas","MCP","first","via","meeting","search tools","tracking","webinars","composio","recordings","Tools",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":20},"01M71TQ29B1EYBCEAP1ZBGXQ1A","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzoho-crm-automation\u002FSKILL.md",[110],{"categoryNo":84,"categoryName":85,"taxonomyType":55,"taxonomyTypeDesc":56},[112,113,89,114,115,116,61,117,118,91,119,92,93,120,94,67,121,122,123,71],"crm automation","zoho crm automation","crm","zoho crm","zoho","leads","manage leads","manage","records","convert","tasks","contacts",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":131,"publishedAt":20},"01M71TPZPMN60DH0XV58KVHY23","zendesk-automation","Automate Zendesk tasks via Rube MCP (Composio): tickets, users, organizations, replies. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzendesk-automation\u002FSKILL.md",[130],{"categoryNo":84,"categoryName":85,"taxonomyType":55,"taxonomyTypeDesc":56},[132,89,133,61,91,92,93,94,134,67,122,135,136,95,96,137,98,101,103,138],"zendesk automation","zendesk","organizations","replies","users","tickets","automate",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":20},"01M71TPXDWKHKG4N6TVEPXWD0N","zapier-make-patterns","No-code automation democratizes workflow building. Zapier and Make (formerly Integromat) let non-developers automate business processes without writing code. But no-code doesn't mean no-complexity ...","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzapier-make-patterns\u002FSKILL.md",[],[146,147,148,149,150,151,152,153,154,89,155,67,156,157,158,159,160,138],"zapier make patterns","zapier","patterns","make","No-Code","complexity","writing","spawner","business","workflow","code","integromat","apache","processes","but",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":170,"publishedAt":20},"01M71TPT5T10WXNKW9G7ZXZ27W","youtube-summarizer","Extract transcripts from YouTube videos and generate comprehensive, detailed summaries using intelligent analysis frameworks","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fyoutube-summarizer\u002FSKILL.md",[167],{"categoryNo":168,"categoryName":169,"taxonomyType":55,"taxonomyTypeDesc":56},"01JBSEEDCAT000000000000016","图像与多媒体",[171,172,173,174,61,175,176,177,178,179,180,181,156,182,183,184,185,186,187,188],"summarizer","youtube","youtube summarizer","Video","content-analysis","frameworks","copilot","2025","github-copilot","extract transcripts","analysis","codex","cli","summaries","github","generate","summarization","2026"]