Для чего нужен файл tsconfig.json в TypeScript-проекте?

Ответ

Файл tsconfig.json — это конфигурационный файл компилятора TypeScript (tsc). Он определяет, как TypeScript-код должен быть преобразован в JavaScript, и задаёт правила для проверки типов.

Ключевые разделы конфигурации:

  • compilerOptions: Самый важный раздел. Задаёт целевой стандарт JavaScript, систему модулей, строгость проверки типов и путь для выходных файлов.
  • include / exclude: Определяет, какие файлы должны компилироваться.
  • extends: Позволяет наследовать настройки из другой конфигурации (например, базового конфига компании).

Пример конфигурации для Node.js проекта:

{
  "compilerOptions": {
    "target": "ES2022",          // Целевая версия ECMAScript
    "module": "CommonJS",        // Система модулей для Node.js
    "outDir": "./dist",          // Папка для скомпилированных .js файлов
    "rootDir": "./src",          // Корневая папка с исходным кодом .ts
    "strict": true,              // Включает все строгие проверки типов
    "esModuleInterop": true      // Упрощает работу с CommonJS-модулями
  },
  "include": ["src/**/*"],       // Компилировать все файлы в папке src
  "exclude": ["node_modules", "**/*.test.ts"]
}

Без tsconfig.json компилятор использует значения по умолчанию, которые часто не подходят для реальных проектов.

Ответ 18+ 🔞

Слушай, а вот этот tsconfig.json — это типа такая бумажка, где ты TypeScript-компилятору объясняешь, как ему с твоим кодом работать. Без неё он как слепой котёнок — шарится, нихуя не понимает, и на выходе получается какая-то дичь.

Ну, короче, что там внутри:

  • compilerOptions: Это, бля, самое главное. Тут ты ему мозги вправляешь: в какой стандарт JS компилировать, как модули собирать, и насколько строго за тобой следить. Без этого — доверия ебать ноль.
  • include / exclude: Ты ему тут пальцем показываешь: вот эту папку (src) — давай, компилируй, а вот эту (node_modules) — обходи за километр, там манда с ушами.
  • extends: Ленивая, но хитрая жопа. Можно взять готовый конфиг от умных дядек и просто сказать: «делай как там».

Вот, смотри, как для простого Node.js проекта выглядит нормальный конфиг:

{
  "compilerOptions": {
    "target": "ES2022",          // Говоришь: «Делай мне JS, как будто на дворе 2022-й год, а не 2002-й».
    "module": "CommonJS",        // «Собирай модули по-старинке, как Node.js любит».
    "outDir": "./dist",          // «Готовые .js файлы складывай в папку `dist`, а то в `src` будет **овердохуища** мусора».
    "rootDir": "./src",          // «Исходники мои — в папке `src`, ищи там».
    "strict": true,              // «Слушай сюда, будь строгим как училка. Хочу, чтобы ты на каждую мою опечатку орал».
    "esModuleInterop": true      // «И сделай так, чтобы импорты из обычных npm-пакетов не вызывали **удивление пиздец**».
  },
  "include": ["src/**/*"],       // Всё, что в `src`, — компилируй.
  "exclude": ["node_modules", "**/*.test.ts"] // А это вот — **да похуй**, не трогай.
}

Если этого файла нет, tsc возьмёт настройки по умолчанию, и получится такая пиздопроебибна, что проще сразу на чистом JS писать. Так что не ленись, заведи его.