用途:为 epicenterhq/epicenter 单体仓库统一 TypeScript 配置。仓库内包均为仅源码 .ts,exports 指向 ./src/*.ts,无构建步骤,消费方(Bun、Vite、Tauri、Cloudflare Worker)直接处理原始 .ts。例外是 packages/workspace 与 packages/field,它们对外发布,需输出 .js 与 .d.ts,exports 指向 ./dist,其 emit 配置放在同级 tsconfig.build.json 中,叶子配置不得添加 outDir、declaration 或 noEmit: false。
主要能力与规则:叶子 tsconfig.json 只能设置 types、库专用严格项(noUnusedLocals/noUnusedParameters)、checkJs(SvelteKit)以及真正包特有的选项(jsx、paths、customConditions、include),其余归入基础配置。两个基础文件为 tsconfig.base.json(target/lib ESNext、module preserve、strict、noEmit、isolatedModules、verbatimModuleSyntax、types [])与 tsconfig.dom.json(仅负责 lib 加入 DOM、DOM.Iterable)。模块策略全仓库统一为 module: "preserve" 加 moduleResolution: "bundler",不使用 NodeNext。
七种叶子层级:Bun 库、Node 库、Svelte 库、SvelteKit 应用、Cloudflare Worker、Bun 应用、Astro 应用,各自 extends 对应基础并添加指定选项。生成的 ./.svelte-kit/tsconfig.json 放在数组最后,不得手改。types 采用显式 opt-in,基础设为 [],叶子按需写 ["bun"] 或 ["node"]。include 不跨 extends 合并,叶子会完全替换继承值,SvelteKit 应用不应自设 include。
使用方式:新增包时按单体仓库技能模板脚手架,选层级复制形状,package.json 只用 exports,入口为 ./src/index.ts,在仓库根执行 bun install,再执行 bun typecheck。
限制:不得在叶子重复声明基础值或 TS 默认值(如 module、target、strict、lib ESNext、sourceMap 等);单元素 extends 数组应改用字符串形式。完整理由与迁移记录见 specs/20260522T190000-modernize-monorepo-tsconfig.md。