Versions
tsc: 5.9.3
tsgo (@typescript/native-preview): 7.0.0-dev.20260206.1
Description
When a child tsconfig.json uses "extends" to inherit from a parent, and the parent defines include globs, tsc and tsgo produce completely different output directory structures because they resolve the inherited include paths differently.
Note: This is a regression — this was working correctly with tsgo a few weeks ago.
Setup
monorepo-root/
├── tsconfig.json # parent config
├── call-ai/...
├── prompts/...
├── use-vibes/...
└── vibes.diy/pkg/
└── tsconfig.json # child config (extends ../../tsconfig.json)
Parent tsconfig.json (at root):
{
"compilerOptions": {
"target": "es2022",
"module": "nodenext",
"moduleResolution": "nodenext",
"outDir": "./dist",
"noEmit": true,
"sourceMap": true
},
"include": [
"call-ai/**/*",
"use-vibes/**/*",
"vibes.diy/**/*",
"prompts/**/*"
]
}
Child tsconfig.json (at vibes.diy/pkg/):
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "./dist",
"sourceMap": true,
"noEmit": false
}
}
Steps to reproduce
From vibes.diy/pkg/:
rm -rf dist && pnpm exec tsc 2>/dev/null; ls dist/
# Output: call-ai prompts use-vibes vibes.diy
rm -rf dist && pnpm exec tsgo 2>/dev/null; ls dist/
# Output: app drizzle.d1-local-backend.config.js ... stories workers
Expected behavior
tsgo should produce the same output directory structure as tsc — resolving inherited include globs relative to the parent config's directory (monorepo root), producing dist/{call-ai,prompts,use-vibes,vibes.diy}.
Actual behavior
tsc resolves the inherited include globs relative to the parent config's directory (monorepo root), producing dist/{call-ai,prompts,use-vibes,vibes.diy}.
tsgo appears to resolve them relative to the child config's directory (vibes.diy/pkg/), producing a flat structure with only local files (app/, stories/, workers/, config files).
Versions
tsc: 5.9.3tsgo(@typescript/native-preview): 7.0.0-dev.20260206.1Description
When a child
tsconfig.jsonuses"extends"to inherit from a parent, and the parent definesincludeglobs,tscandtsgoproduce completely different output directory structures because they resolve the inheritedincludepaths differently.Note: This is a regression — this was working correctly with
tsgoa few weeks ago.Setup
Parent
tsconfig.json(at root):{ "compilerOptions": { "target": "es2022", "module": "nodenext", "moduleResolution": "nodenext", "outDir": "./dist", "noEmit": true, "sourceMap": true }, "include": [ "call-ai/**/*", "use-vibes/**/*", "vibes.diy/**/*", "prompts/**/*" ] }Child
tsconfig.json(atvibes.diy/pkg/):{ "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "./dist", "sourceMap": true, "noEmit": false } }Steps to reproduce
From
vibes.diy/pkg/:Expected behavior
tsgoshould produce the same output directory structure astsc— resolving inheritedincludeglobs relative to the parent config's directory (monorepo root), producingdist/{call-ai,prompts,use-vibes,vibes.diy}.Actual behavior
tscresolves the inheritedincludeglobs relative to the parent config's directory (monorepo root), producingdist/{call-ai,prompts,use-vibes,vibes.diy}.tsgoappears to resolve them relative to the child config's directory (vibes.diy/pkg/), producing a flat structure with only local files (app/,stories/,workers/, config files).