tsconfig/monorepo
tsconfig/monorepo configures a package in a monorepo: Node16 modules, ES2020 output, declarations, source maps,
strict type checking, and composite for project references.
{ "extends": "@repobuddy/typescript/tsconfig/monorepo", "compilerOptions": { "outDir": "esm", "rootDir": "src" }, "include": ["src"]}Options
Section titled “Options”None. The preset takes no parameters. Override any option in your own compilerOptions.
Source
Section titled “Source”{ "extends": [ "./emit/buddy.json", "./interop/buddy.json", "./language/buddy.json", "./modules/buddy.json", "./projects/composite.json", "./type-checking/buddy.json" ]}Each entry links to its category page: emit/buddy,
interop/buddy,
language/buddy,
modules/buddy,
projects/composite, and
type-checking/buddy.
Effective config
Section titled “Effective config”tsc --showConfig (TypeScript 7.0.2) for a tsconfig.json that only extends the preset:
{ "compilerOptions": { "composite": true, "declaration": true, "declarationMap": true, "exactOptionalPropertyTypes": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, "module": "node16", "newLine": "lf", "noPropertyAccessFromIndexSignature": true, "noUncheckedIndexedAccess": true, "noUnusedLocals": true, "noUnusedParameters": true, "resolveJsonModule": true, "strict": true, "sourceMap": true, "target": "es2020", "useDefineForClassFields": true, "moduleResolution": "node16", "moduleDetection": "force", "preserveConstEnums": true, "incremental": true }}The preset files set the first 17 options. TypeScript derives the last four:
moduleResolution: node16andmoduleDetection: forcefollow frommodule: node16.incrementalfollows fromcomposite.preserveConstEnumsfollows fromisolatedModules.
TypeScript 6.0.3 reports the same set of options.
Behavior
Section titled “Behavior”verbatimModuleSyntaxstays off. With it on,ts-jestreportsTS1286: ESM syntax is not allowed in a CommonJS modulefor ESM projects.compositerequires every source file to be matched byincludeorfiles, and emits a.tsbuildinfofile.- The preset uses an
extendsarray, which needs TypeScript 5.0 or later. For older versions, usetsconfig/legacy/monorepo. - No
lib,types,outDir, orrootDiris set.
Examples
Section titled “Examples”This repository’s packages/typescript/tsconfig.base.json:
{ "extends": "./tsconfig/monorepo", "compilerOptions": { "outDir": "esm", "rootDir": "src", "skipLibCheck": true }, "include": ["src", "types"]}A package that references another workspace package (testcases/build-ts/tsconfig.json):
{ "extends": "@repobuddy/typescript/tsconfig/monorepo", "compilerOptions": { "outDir": "esm", "rootDir": "src" }, "include": ["src"], "references": [ { "path": "../../packages/typescript" } ]}