Ts config
Skill fusengine/agents/plugins/typescript-expert/skills/ts-config
Redefining development through cognitive automation and collaborative agent systems.
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.
What its author says it does
Copied from the file, not written here
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.
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