{"id":"afd81bab-1017-40ed-8f8b-b1ce7a8a45bd","shortId":"423Rkm","kind":"skill","title":"typescript-expert","tagline":"TypeScript and JavaScript expert with deep knowledge of type-level programming, performance optimization, monorepo management, migration strategies, and modern tooling.","description":"# 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/vite/rollup bundler internals → typescript-build-expert\n   - Complex ESM/CJS 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('./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\"\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/paths 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/config\n   npm run -s build\n   ```\n   \n   **Safety note:** Avoid watch/serve 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// Create nominal types to prevent primitive obsession\ntype Brand<K, T> = K & { __brand: T };\ntype UserId = Brand<string, 'UserId'>;\ntype OrderId = Brand<string, 'OrderId'>;\n\n// Prevents accidental mixing of domain primitives\nfunction processOrder(orderId: OrderId, userId: UserId) { }\n```\n- Use for: Critical domain primitives, API boundaries, currency/units\n- Resource: https://egghead.io/blog/using-branded-types-in-typescript\n\n**Advanced Conditional Types**\n```typescript\n// Recursive type manipulation\ntype DeepReadonly<T> = T extends (...args: any[]) => any \n  ? T \n  : T extends object \n    ? { readonly [K in keyof T]: DeepReadonly<T[K]> }\n    : T;\n\n// Template literal type magic\ntype PropEventSource<Type> = {\n  on<Key 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// Use 'satisfies' for constraint validation (TS 5.0+)\nconst config = {\n  api: \"https://api.example.com\",\n  timeout: 5000\n} satisfies Record<string, string | number>;\n// Preserves literal types while ensuring constraints\n\n// Const assertions for maximum inference\nconst routes = ['/home', '/about', '/contact'] as const;\ntype Route = typeof routes[number]; // '/home' | '/about' | '/contact'\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`/`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<typeof function>` helper\n  3. Break circular dependencies with type-only imports\n- Resource: https://github.com/microsoft/TypeScript/issues/47663\n\n**Missing type declarations**\n- Quick fix with ambient declarations:\n```typescript\n// types/ambient.d.ts\ndeclare module 'some-untyped-package' {\n  const value: unknown;\n  export default value;\n  export = value; // if CJS interop is needed\n}\n```\n- For more details: [Declaration Files Guide](https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.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// Bad: Infinite recursion\ntype InfiniteArray<T> = T | InfiniteArray<T>[];\n\n// Good: Limited recursion\ntype NestedArray<T, D extends number = 5> = \n  D extends 0 ? T : T | NestedArray<T, [-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/.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/register`\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/needed)\ncommand -v ts-migrate >/dev/null 2>&1 && npx ts-migrate migrate . --sources 'src/**/*.js'\ncommand -v typesync >/dev/null 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/Turborepo | 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, <20 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// Root tsconfig.json\n{\n  \"references\": [\n    { \"path\": \"./packages/core\" },\n    { \"path\": \"./packages/ui\" },\n    { \"path\": \"./apps/web\" }\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/plugins\n- Have complex custom rules\n- Working with Vue/Angular (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// in avatar.test-d.ts\nimport { expectTypeOf } from 'vitest'\nimport type { Avatar } from './avatar'\n\ntest('Avatar props are correctly typed', () => {\n  expectTypeOf<Avatar>().toHaveProperty('size')\n  expectTypeOf<Avatar['size']>().toEqualTypeOf<'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 >/dev/null 2>&1 && npx tsx --inspect src/file.ts\ncommand -v ts-node >/dev/null 2>&1 && npx ts-node --inspect-brk src/file.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/analyze-trace >/dev/null 2>&1 && npx @typescript/analyze-trace trace\n\n# Memory usage analysis\nnode --max-old-space-size=8192 node_modules/typescript/lib/tsc.js\n```\n\n### Custom Error Classes\n```typescript\n// 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/JavaScript 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/export patterns\n- [ ] No circular dependencies\n- [ ] Proper use of barrel exports (avoid over-bundling)\n- [ ] ESM/CJS 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 <10 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://github.com/microsoft/TypeScript/wiki/Performance)\n- [Type instantiation tracking](https://github.com/microsoft/TypeScript/pull/48077)\n\n### Advanced Patterns\n- [Type Challenges](https://github.com/type-challenges/type-challenges)\n- [Type-Level TypeScript Course](https://type-level-typescript.com)\n\n### Tools\n- [Biome](https://biomejs.dev) - Fast linter/formatter\n- [TypeStat](https://github.com/JoshuaKGoldberg/TypeStat) - Auto-fix TypeScript types\n- [ts-migrate](https://github.com/airbnb/ts-migrate) - Migration toolkit\n\n### Testing\n- [Vitest Type Testing](https://vitest.dev/guide/testing-types)\n- [tsd](https://github.com/tsdjs/tsd) - 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\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["typescript","expert","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-typescript-expert","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/typescript-expert","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 35034 github stars · SKILL.md body (14,470 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T12:51:30.028Z","embedding":null,"createdAt":"2026-04-18T20:26:22.275Z","updatedAt":"2026-04-25T12:51:30.028Z","lastSeenAt":"2026-04-25T12:51:30.028Z","tsv":"'-1':721 '-3':931 '/about':468,478 '/airbnb/ts-migrate)':1694 '/apps/web':997 '/avatar':1089 '/blog/using-branded-types-in-typescript':364 '/contact':469,479 '/dev/null':166,871,885,1137,1149,1197 '/docs/handbook/declaration-files/introduction.html)':663 '/guide/testing-types)':1703 '/home':467,477 '/joshuakgoldberg/typestat)':1683 '/microsoft/typescript/issues/47663':625 '/microsoft/typescript/pull/48077)':1661 '/microsoft/typescript/wiki/performance)':1655 '/package.json':158 '/packages/core':993 '/packages/ui':995 '/register':792 '/tsdjs/tsd)':1707 '/type-challenges/type-challenges)':1668 '0':57,716,722 '1':118,511,603,677,723,737,821,873,887,914,940,1139,1151,1169,1199 '10':430,1601 '100':522,924,1038 '18':945 '2':165,230,517,609,684,724,743,839,872,886,930,1138,1150,1168,1198 '20':964 '3':239,524,613,692,725,749,845 '4':248,529,726,756,854 '5':713 '5.0':442 '50':983 '5000':448 '64':1034 '8192':1212 'absolut':207 'accident':342 'action':1736 'adapt':202 'add':830,846 'advanc':30,302,365,1662 'affect':283 'ai':852,1334,1344,1351,1361 'ai-assist':1333 'ai-gener':1350 'alias':532 'align':748 'allowj':823,835 'altern':797 'alway':1711 'ambient':632 'analysi':84,1205 'analyz':119,1190 'api':358,411,445,1119,1416 'api.example.com':446 'app':557 'appli':240 'applic':1730 'approach':203,254,1266 'appropri':242,1452 'arg':376 'ask':1774 'aspect':1376 'assert':461,1396,1432 'assist':853,1335 'async':1302 'augment':1558 'auto':1685 'auto-fix':1684 'autom':862 'avatar':1087,1091,1100 'avatar.test-d.ts':1080 'avoid':255,291,525,555,799,1441,1472,1502,1555,1632 'await':1293,1299,1308,1318 'awar':1063 'bad':697 'barrel':1500 'base':50 'baseurl':745 'baseurl/paths':212 'bash':137,251,486,817,1126 'basic':274 'best':53,1246,1418 'better':131,979,1427 'biom':169,904,1008,1012,1058,1065,1584,1676 'biomejs.dev':1677 'boilerpl':1346 'boundari':359,1535,1782 'brand':311,325,329,333,338,1453 'break':534,614,1716 'brk':1158 'broad':227 'build':76,113,282,288,536,938,1597,1621 'bundl':1505 'bundler':72,105,742,1282,1623 'cach':565,759,936,1626 'callback':402 'cannot':591,731 'case':1538 'categori':235 'caus':594,669,1464 'challeng':1665 'chang':229,401,1713 'check':180,484,490,498,545,738,921,1176,1390,1576,1580,1586,1615,1622,1634 'checkj':825,837 'checklist':1365 'choos':957,966 'circular':82,526,599,615,670,1495 'cjs':651,942,1290,1296,1312 'cjs-packag':1295 'clarif':1776 'class':1217,1221,1225,1527 'clean':1182 'clear':758,1749 'cli':1123 'co':1546 'co-loc':1545 'code':1233,1363,1369,1513,1542 'command':134,866,882,1134,1144,1194 'common':503 'compar':667 'compat':1507 'compil':93,418,774,807,1331,1466 'compile-tim':417 'compileropt':834,998,1252 'complex':78,237,583,969,1051,1112,1358,1461,1473 'composit':576,999 'comprehens':122,1587 'condit':366,682 'config':444,1624 'configur':141,213,566,987,1280,1486 'consid':223,1720 'consider':1459 'consist':1491 'console.log':159 'const':155,443,460,465,471,642,1291,1431 'constraint':439,459,528,695,1402 'constructor':1229 'context':1362 'contract':1120 'copilot':1338 'core':138 'correct':1094,1509 'cours':1673 'creat':317 'criteria':1785 'critic':355,1016,1583 'currency/units':360 'current':52,1245 'custom':1052,1215,1525 'd':710,714,727 'd.ts':1566 'day':915,932 'debug':1121,1124,1127,1174 'decis':896,955,1568 'declar':628,633,636,658,1001,1413,1564 'declarationmap':1003 'dedic':1553 'deep':9,34,70,104,510 'deepli':672 'deepreadon':373,388 'default':646,1250,1321 'defin':1404 'definit':1348 'depend':83,600,616,970,1322,1496 'depth':425,666,680,1471 'describ':1737,1753 'despit':734 'detail':657 'detect':147,179,199,201 'develop':1336 'diagnos':487 'diagnost':300 'direct':1130 'discrimin':1405,1521 'document':1357 'doesn':1066,1462 'domain':314,345,356,1374,1456 'domain-specif':1373 'domainerror':1226,1241 'dynam':1287,1510 'e':154,168,497 'echo':176,197 'ecosystem':149 'effort':901 'egghead.io':363 'egghead.io/blog/using-branded-types-in-typescript':362 'els':1604 'enabl':539,822,855,1391,1625 'ensur':458,752 'environ':1765 'environment-specif':1764 'error':426,584,1216,1220,1228,1408,1428,1515,1524,1526,1534 'error.capturestacktrace':1242 'eslint':170,902,1010,1042,1045,1589,1592 'esm':794,943,1264,1276,1310,1315 'esm-first':1263 'esm/cjs':79,1506 'event':415 'eventnam':399 'exactoptionalpropertytyp':1259 'exampl':99 'excel':1339 'excess':509,664,1468 'exclud':568,1640 'execut':1732 'exhaust':1536 'exist':211,215,736,828,832,1447,1717 'expecttypeof':1082,1096,1099,1596 'expert':3,7,26,32,77,88,98,114,1647,1770 'expertis':65,106,247,305,812,1007 'explicit':608,1412 'export':597,604,645,648,1327,1501 'extend':375,381,687,711,715,1227 'extendeddiagnost':493 'f':186,189,192,195 'fail':253 'fallback':136 'fals':495,1180,1189 'fast':252,1678 'faster':907,927,1018 'featur':858 'feedback':928 'fewer':911 'file':500,659,735,841,848,850,925,1129,1277,1565,1644 'find':732 'first':126,1030,1265 'fix':183,504,601,630,675,1609,1686 'focus':1370 'format':1027 'function':347,1114,1303,1718 'generat':1352 'generatetrac':1186 'generic':527,694,1113,1342,1401 'github':1337 'github.com':624,1654,1660,1667,1682,1693,1706 'github.com/airbnb/ts-migrate)':1692 'github.com/joshuakgoldberg/typestat)':1681 'github.com/microsoft/typescript/issues/47663':623 'github.com/microsoft/typescript/pull/48077)':1659 'github.com/microsoft/typescript/wiki/performance)':1653 'github.com/tsdjs/tsd)':1705 'github.com/type-challenges/type-challenges)':1666 'glob':129 'global':1556 'good':704 'gradual':842 'grep':128,167,496,1170 'guard':1438 'guid':660 'gymnast':1443 'handl':1394,1409,1508,1516 'helper':612,863 'high':939,948 'hot':1477 'identifi':231 'implement':1549 'implicit':1380 'import':205,621,1081,1085,1288,1294,1300,1319,1511 'import/export':1492 'improv':549 'includ':567 'increment':494,561,818,1179,1188,1617 'infer':433,464,587 'infinit':698 'infinitearray':701,703 'inherit':1530 'input':1779 'inspect':1142,1157 'inspect-brk':1156 'instal':890,1133,1193 'installed/needed':865 'instanti':424,507,1470,1657 'instead':688 'interfac':516,686,1421 'intern':73,94,124 'interop':652 'intersect':514,691 'invok':56,108 'issu':60,559,1163,1612,1722 'javascript':6,813 'jest':173 'join':163 'js':843,881 'json':988,1251 'justifi':1398 'k':326,328,384,390 'key':400,405 'keyof':386 'knowledg':10,36 'languag':1638 'larg':519,552,981 'lerna':933 'lerna.json':190 'level':14,40,238,308,431,1117,1307,1671 'leverag':1436 'lg':1105 'librari':410,543,1111 'limit':427,678,705,1057,1643,1741 'line':501 'lint':918,1026,1064,1581,1588 'linter/formatter':1679 'liter':393,455,1434,1449 'live':258 'loader':796 'locat':1547 'long':257 'long-liv':256 'low':913 'magic':395 'manag':19,951 'manipul':371 'map':766,1474 'mask':556 'masteri':1122 'match':204,740,1750 'matrix':956 'max':1208 'max-old-space-s':1207 'maximum':463 'may':1316 'md':1104 'medium':929 'member':523 'memori':1203 'merg':826 'messag':1230,1239,1429 'migrat':20,80,811,816,819,870,877,878,895,900,1691,1695 'minim':1400 'miss':595,626,891,1787 'mix':343 'mode':857 'model':315 'modern':23,946,1005,1284 'modul':87,637,728,733,1161,1171,1269,1489,1554,1642 'moduleresolut':739,1281 'modules/.cache':763 'modules/typescript/lib/tsc.js':1214 'monorepo':18,182,198,222,571,751,950,982,986,1488 'mts':1273 'much':906 'mysteri':730 'n':164 'name':593 'need':280,654,905,926,935,962,971,1047,1060,1279,1317 'nestedarray':708,719 'never':1540 'newvalu':403 'no-watch':275 'node':145,153,502,762,783,787,793,944,1148,1155,1206,1213,1641 'node.js':778 'noemit':266 'noimplicitoverrid':1257 'nomin':318 'nopropertyaccessfromindexsignatur':1261 'note':290,1298 'nouncheckedindexedaccess':1255 'npm':260,267,285 'npx':142,264,270,491,874,888,1140,1152,1164,1184,1200 'null':1389 'number':453,476,712,1237 'nx':175,952,967,976,1605 'nx.json':193 'nx/turborepo':934 'object':382,1425 'object.keys':160 'obsess':323 'often':547,977,1017 'okay':909,1032 'old':1209 'one':298,859,861 'one-shot':297 'optim':17,43,481 'orderid':337,340,349,350 'organ':1543 'output':101,1759 'outputs/config':284 'over-bundl':1503 'overview':1740 'p':156 'p.dependencies':162 'p.devdependencies':161 'packag':641,893,965,984,1297,1313,1325,1602 'package.json':152,1271 'parallel':937 'pars':151 'path':747,765,770,791,801,810,992,994,996,1478 'pattern':310,538,585,1493,1517,1663 'perform':16,42,90,132,480,485,537,550,975,978,1177,1458,1611,1649,1652 'permiss':1780 'pkg':1292,1320 'pleas':107 'plugin':973 'pnpm-workspace.yaml':187 'possibl':1560 'practic':35,54,1247,1419 'pre':806 'pre-compil':805 'preced':184 'precis':569 'predic':1440 'prefer':150,214,1420 'preserv':454,1224 'prettier':171,903 'prevent':321,341 'primit':322,346,357,1457 'prioriti':602,676 'problem':48,234,581 'process':259,293 'processord':348 'product':804 'profil':91 'program':15,41,309 'project':120,216,224,553,573,1031,1484,1599,1618 'prop':1092 'proper':1219,1386,1393,1403,1497,1529,1561 'propeventsourc':397 'protocol':754 'public':1232,1235,1415 'publish':1110 'quick':629,1567 'r':788 'raw':219 'read':127 'readon':383 'real':46,579 'real-world':45,578 'recommend':66,1077 'record':450 'recurs':369,428,535,673,679,699,706 'refer':225,574,991,1485,1619 'relat':209 'renam':840 'replac':512 'report':273 'requir':61,103,157,606,974,1301,1778 'resolut':582,729,1162,1172 'resolution.log':1167,1173 'resolv':809,1723 'resourc':361,622,1648 'respect':210 'result':1518 'return':1410 'returntyp':611 'review':1364,1367,1771 'rf':761 'rm':760 'root':989 'rout':466,473,475 'rule':912,1036,1053 'rules/plugins':1049 'run':261,272,286 'runtim':768,777,779,803 'safe':414,1533 'safeti':289,1378,1781 'satisfi':437,449 'scope':1752 'script':217 'server':1639 'set':1267,1332 'setup':121,1021 'shape':1426 'share':1550 'shell':133 'shot':299 'signific':548 'simpl':960 'simpler':1445 'simplifi':693 'singl':1023 'size':1098,1101,1211,1600 'skill':1728,1744 'skill-typescript-expert' 'skiplibcheck':540,1480,1616 'slow':488,1465,1613,1620,1627,1637 'sm':1103 'solut':243,780,1446 'solv':49 'some-untyped-packag':638 'sourc':879 'source-sickn33' 'space':1210 'specif':64,233,1048,1375,1766 'speed':908,963,1014,1582 'split':518,1514 'src':880 'src/file.ts':1143,1159 'stack':665,1223 'standalon':1708 'statuscod':1236 'stay':1043 'stop':69,116,1772 'strategi':21,244,482,820,1073 'strict':856,1248,1253,1388 'string':334,339,451,452,1231,1234 'structur':961,1328 'style':206 'subag':115 'substitut':1762 'success':1784 'super':1238 'support':1059 'switch':67,1537 'system':304,416,1490 'task':1748 'techniqu':434 'templat':392,1448 'test':185,188,191,194,268,1072,1076,1090,1108,1356,1594,1628,1636,1697,1700,1710,1768 'this.constructor':1244 'this.name':1240 'thorough':250 'thread':1631 'time':419,499,775 'timeout':447 'toequaltypeof':1102 'tohaveproperti':1097 'tool':24,125,148,178,220,894,947,1006,1024,1125,1132,1285,1571,1598,1675 'toolkit':1696 'top':1306 'top-level':1305 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'trace':1160,1183,1187,1191,1202 'traceresolut':1166 'track':1658 'tradit':1020 'treat':1757 'tree':1569 'tri':757 'true':541,562,577,836,838,1000,1002,1004,1254,1256,1258,1260,1262,1481 'ts':441,782,786,800,844,869,876,1035,1147,1154,1690 'ts-migrat':868,875,1689 'ts-node':781,785,1146,1153 'tsbuildinfo':564,764 'tsc':143,265,492,916,1165,1185,1578 'tsconfig':228,790,1483,1646 'tsconfig-path':789 'tsconfig.json':829,833,990 'tsd':1704 'tsx':1136,1141 'turbo.json':196 'turborepo':174,954,958,1603 'type':13,39,89,97,303,307,312,319,324,331,336,367,370,372,394,396,404,413,423,432,456,472,483,489,506,513,521,531,544,558,588,596,607,619,627,668,674,683,690,700,707,847,892,920,1062,1071,1075,1086,1095,1109,1116,1175,1268,1347,1353,1355,1359,1377,1382,1387,1395,1411,1423,1435,1437,1442,1450,1454,1460,1469,1475,1519,1532,1541,1544,1551,1557,1575,1579,1585,1593,1614,1633,1656,1664,1670,1688,1699,1709 'type-awar':1061 'type-check':919 'type-level':12,38,306,1115,1669 'type-level-typescript.com':1674 'type-on':618 'type-saf':412,1531 'typecheck':263 'typeof':474 'types/ambient.d.ts':635 'typescript':2,4,25,31,75,86,96,112,316,368,435,634,696,769,815,985,1029,1041,1078,1128,1218,1275,1341,1417,1591,1650,1672,1687 'typescript-build-expert':74,111 'typescript-eslint':1040,1590 'typescript-expert':1 'typescript-first':1028 'typescript-module-expert':85 'typescript-type-expert':95 'typescript/analyze-trace':1196,1201 'typescript/javascript':1368 'typestat':1680 'typesync':884,889 'ultra':63 'ultra-specif':62 'union':520,1406,1522 'unknown':644,1384 'untyp':640 'usag':1204 'use':109,123,296,353,408,436,530,560,572,610,685,784,795,851,1011,1178,1272,1286,1343,1383,1430,1451,1479,1498,1562,1574,1726,1742 'userid':332,335,351,352 'util':1118 'v':146,867,883,1135,1145,1195 'valid':249,295,420,440,1349,1712,1767 'valu':643,647,649 'vari':949 'verifi':744 'version':139,144 'visual':972 'vitest':172,271,1074,1084,1595,1629,1698 'vitest.dev':1702 'vitest.dev/guide/testing-types)':1701 'void':406,407 'vs':208,953,1009,1037 'vue/angular':1056 'want':1022 'watch':277,421 'watch/serve':292 'webpack/vite/rollup':71 'week':941 'wiki':1651 'work':772,1054 'workflow':1734 'workspac':753,755 'world':47,580 'www.typescriptlang.org':662 'www.typescriptlang.org/docs/handbook/declaration-files/introduction.html)':661 'x':590 'yet':1070","prices":[{"id":"9922eb21-f0a3-4543-bebb-16529500098e","listingId":"afd81bab-1017-40ed-8f8b-b1ce7a8a45bd","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:26:22.275Z"}],"sources":[{"listingId":"afd81bab-1017-40ed-8f8b-b1ce7a8a45bd","source":"github","sourceId":"sickn33/antigravity-awesome-skills/typescript-expert","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/typescript-expert","isPrimary":false,"firstSeenAt":"2026-04-18T21:46:38.289Z","lastSeenAt":"2026-04-25T12:51:30.028Z"},{"listingId":"afd81bab-1017-40ed-8f8b-b1ce7a8a45bd","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/typescript-expert","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/typescript-expert","isPrimary":true,"firstSeenAt":"2026-04-18T20:26:22.275Z","lastSeenAt":"2026-04-25T12:40:13.482Z"}],"details":{"listingId":"afd81bab-1017-40ed-8f8b-b1ce7a8a45bd","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"typescript-expert","github":{"repo":"sickn33/antigravity-awesome-skills","stars":35034,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-25T06:33:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"91d295b179c3e8d276bf839481d91cfa01a46663","skill_md_path":"skills/typescript-expert/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/typescript-expert"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"typescript-expert","description":"TypeScript and JavaScript expert with deep knowledge of type-level programming, performance optimization, monorepo management, migration strategies, and modern tooling."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/typescript-expert"},"updatedAt":"2026-04-25T12:51:30.028Z"}}