Ts config
Skill fusengine/agents/plugins/typescript-expert/skills/ts-config
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.From its SKILL.md
npx -y skills add fusengine/agents --skill ts-configAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 22 stars22 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.6 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
TypeScript Config (TS 6.0)
Agent Workflow (MANDATORY)
Before writing any tsconfig, use TeamCreate to spawn 3 agents:
- fuse-ai-pilot:explore-codebase - Detect runtime (Bun/Node/bundler), existing tsconfig,
package.jsontype - fuse-ai-pilot:research-expert - Confirm current flags on typescriptlang.org release notes + runtime docs
- mcp__context7__query-docs -
/microsoft/typescriptfor any flag whose behavior is unclear
After writing, run fuse-ai-pilot:sniper for validation.
Overview
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 |
Critical Rules
- Never
moduleResolution: node/node10- deprecated in 6.0, removed in 7.0. Usebundlerornodenext. - Always
verbatimModuleSyntax: true- both tracks. Forces explicitimport type, matches Node's type stripping. strict+noUncheckedIndexedAccess- strict is the 6.0 default; addnoUncheckedIndexedAccessexplicitly.- Set
typesexplicitly - 6.0 defaultstypesto[]. Add["node"],["bun"], etc. or you lose globals. - Set
rootDirwhen sources are nested - 6.0 defaultsrootDirto the tsconfig dir, no longer inferred.
Decision: which track?
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)
Reference Guide
Concepts
| 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 |
Templates
| Template | When to Use |
|---|---|
| tsconfig.bundler.md | Complete Bun/bundler tsconfig |
| tsconfig.node.md | Complete pure-Node tsconfig |
Quick Reference
Bundler / Bun
{
"compilerOptions": {
"module": "Preserve",
"moduleResolution": "bundler",
"verbatimModuleSyntax": true,
"allowImportingTsExtensions": true,
"noEmit": true,
"strict": true,
"noUncheckedIndexedAccess": true
}
}
Pure Node.js (native type stripping)
{
"compilerOptions": {
"module": "nodenext",
"rewriteRelativeImportExtensions": true,
"erasableSyntaxOnly": true,
"verbatimModuleSyntax": true,
"noEmit": true, // only if you never emit .js
"strict": true
}
}
Best Practices
DO
- Add
"ignoreDeprecations": "6.0"temporarily while migrating, then remove it before adopting TS 7.0 - Use subpath imports
"#/*": "./src/*"inpackage.jsonimports(supported undernodenextandbundler) - Fold any
baseUrlprefix into eachpathsentry (baseUrlis deprecated)
DON'T
- Mix
module: PreservewithmoduleResolution: nodenext(or vice-versa) - Set
esModuleInterop,allowSyntheticDefaultImports, oralwaysStricttofalse(no longer allowed) - Use
enum,namespacewith runtime code, or parameter properties in files run by Node's type stripping
What ships with it: 6 files
11.5 KB alongside SKILL.md
references/
- bundler-track.md2.2 KB
- deprecations-6.md3.2 KB
- node-track.md2.6 KB
- templates/tsconfig.bundler.md1.8 KB
- templates/tsconfig.node.md1.8 KB
- .gitkeep0 B