tsconfig.json у корені проєкту каже компілятору TypeScript, які файли перевіряти і як це робити. Каталог з цим файлом вважається коренем проєкту.
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"compilerOptions": {
"target": "es2022",
"module": "esnext",
"moduleResolution": "bundler",
"strict": true,
"noEmit": true,
"types": ["vite/client"],
"paths": { "@/*": ["./resources/js/*"] }
},
"include": ["resources/js/**/*.ts", "resources/js/**/*.vue"],
"exclude": ["node_modules", "public"]
}
Основні розділи:
include/exclude/files- які файли входять у проєкт.includeприймає шаблони,excludeвідкидає частину з них,files- явний список;compilerOptions- як перевіряти й що генерувати: строгість, цільова версія JavaScript, система модулів, шляхи, глобальні типи;extends- успадкувати базовий конфіг (свій спільний або з пакета на кшталт@tsconfig/strictest,@vue/tsconfig);references- посилання на інші проєкти в монорепозиторії.
Важливо розуміти, хто читає tsconfig.json:
tsc- повністю;- редактор (мовний сервер TypeScript) - для підказок і помилок;
- збирачі (Vite, esbuild) - лише частину опцій, і не перевіряють типи;
- Node.js з вбудованим зняттям типів - не читає взагалі.
noEmit: true - типова опція для застосунків на Vite: JavaScript генерує збирач, а tsc лише перевіряє типи.
Нові значення за замовчуванням (TypeScript 6.0+ і 7.0): strict увімкнено, module - esnext, target - останній стабільний стандарт ECMAScript, types - порожній список. Порожній tsconfig.json сьогодні - вже доволі строга конфігурація.
Практична порада: не копіювати чужий конфіг цілком, а починати з базового пресету фреймворку й змінювати лише те, що розумієте, - багато «магічних» опцій зі старих статей у TypeScript 7 уже видалено.