plugins/typescript-expert/skills/ts-config/SKILL.md
Use when: creating or migrating a tsconfig.json, choosing module/moduleResolution, or fixing TS 6.0 deprecation errors. Covers the two official 2026 config tracks (Bun/bundler vs pure Node.js) and the TS 6.0 → 7.0 deprecation cleanup. Do NOT use for: TypeScript language syntax and idioms (use ts-language-patterns), framework configs shipping their own tsconfig base (Next.js/Astro/Vite plugin skills), or non-TS build tooling.
npx skillsauth add fusengine/agents ts-configInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Before writing any tsconfig, use TeamCreate to spawn 3 agents:
package.json type/microsoft/typescript for any flag whose behavior is unclearAfter writing, run fuse-ai-pilot:sniper for validation.
There are exactly two supported config trajectories in 2026. Pick by runtime, never mix.
| Track | Runtime | module | moduleResolution |
|-------|---------|----------|--------------------|
| Bundler | Bun, Vite, esbuild, webpack | Preserve | bundler |
| Node | Pure Node.js (native type stripping) | nodenext | nodenext |
moduleResolution: node / node10 - deprecated in 6.0, removed in 7.0. Use bundler or nodenext.verbatimModuleSyntax: true - both tracks. Forces explicit import type, matches Node's type stripping.strict + noUncheckedIndexedAccess - strict is the 6.0 default; add noUncheckedIndexedAccess explicitly.types explicitly - 6.0 defaults types to []. Add ["node"], ["bun"], etc. or you lose globals.rootDir when sources are nested - 6.0 defaults rootDir to the tsconfig dir, no longer inferred.Runs on Bun, or bundled by Vite/esbuild/webpack/Parcel?
→ Bundler track → references/bundler-track.md
Runs directly on `node file.ts` (type stripping), or emits .js for Node?
→ Node track → references/node-track.md
Migrating an existing 5.x config / seeing deprecation errors?
→ references/deprecations-6.md (do this first, then pick a track)
| Topic | Reference | When to Consult | |-------|-----------|-----------------| | Bundler track | bundler-track.md | Load when configuring a Bun or bundler (Vite/esbuild/webpack) project | | Node track | node-track.md | Load when configuring a pure Node.js project with native type stripping | | 6.0 deprecations | deprecations-6.md | Load when migrating from TS 5.x or fixing deprecation errors |
| Template | When to Use | |----------|-------------| | tsconfig.bundler.md | Complete Bun/bundler tsconfig | | tsconfig.node.md | Complete pure-Node tsconfig |
{
"compilerOptions": {
"module": "Preserve",
"moduleResolution": "bundler",
"verbatimModuleSyntax": true,
"allowImportingTsExtensions": true,
"noEmit": true,
"strict": true,
"noUncheckedIndexedAccess": true
}
}
{
"compilerOptions": {
"module": "nodenext",
"rewriteRelativeImportExtensions": true,
"erasableSyntaxOnly": true,
"verbatimModuleSyntax": true,
"noEmit": true, // only if you never emit .js
"strict": true
}
}
"ignoreDeprecations": "6.0" temporarily while migrating, then remove it before adopting TS 7.0"#/*": "./src/*" in package.json imports (supported under nodenext and bundler)baseUrl prefix into each paths entry (baseUrl is deprecated)module: Preserve with moduleResolution: nodenext (or vice-versa)esModuleInterop, allowSyntheticDefaultImports, or alwaysStrict to false (no longer allowed)enum, namespace with runtime code, or parameter properties in files run by Node's type strippingtesting
Copy self-audit and ban-lists — filler verbs/hype adjectives, slop placeholder names, fake-precise numbers, Title Case headlines, humor in error copy ('Oops!'), em-dash crutch, one copy register per page.
development
Logged-in web apps — dashboards, auth flows, settings, onboarding, data tables, command palettes, modals, toasts. Register `product`: density and glance-speed over marketing polish, no hero/CTA-tricks, every data surface covers empty/loading/error explicitly, tables and dataviz follow preattentive-processing rules.
development
Marketing sites, landing pages, campaign pages — register `brand` (design IS the product). Structure comes from the register's POV + a macrostructure pick, never from copying an inspiration site's section flow. Hero discipline, deviated section order, asymmetric grids, and a silhouette lookalike-test gate before ship.
development
Token-strategy core — OKLCH color rules, neutral tinting, accent-commitment levels, type scale, 8pt spacing grid, touch targets, and the canonical output format of design-system.md (the file the harness gates on). This is routing step 1 of design-method/SKILL.md — read it before design-web/design-webapp/design-ios/design-android, before picking or auditing a single color/type/spacing value.