Хотите заказать веб-сайт? Связаться с нами

Настройка TypeScript-проекта и tsconfig.json

До сих пор каждый флаг компилятора — --target, --strict, --noEmit — приходилось прописывать вручную при каждом запуске. Сегодня настроим полноценный TypeScript-проект: установим TypeScript как зависимость и сгенерируем tsconfig.json, чтобы один раз задать настройки и больше не вспоминать их при каждой компиляции.

Настройка TypeScript-проекта и tsconfig.json

Подготовка

Создайте новую папку проекта и инициализируйте её:

mkdir ts-project
cd ts-project
npm init -y

Установите TypeScript как зависимость для разработки — не глобально, а именно в проект, чтобы версия компилятора была зафиксирована и одинакова у всей команды:

npm install typescript --save-dev

Создаём tsconfig.json

Шаг 1: Генерируем конфиг командой tsc --init

Вместо того чтобы писать конфиг с нуля, сгенерируйте его:

npx tsc --init

В консоли вы увидите примерно такое сообщение:

Created a new tsconfig.json with:
  target: es2016
  module: commonjs
  strict: true
  esModuleInterop: true
  skipLibCheck: true
  forceConsistentCasingInFileNames: true
 
You can learn more at https://aka.ms/tsconfig.json

Шаг 2: Смотрим, что внутри

Реальный файл получается длинным — большая часть строк там закомментирована и служит подсказками по каждой опции. Если убрать комментарии, активная часть выглядит так:

{
  "compilerOptions": {
    "target": "es2016",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}

Обратите внимание на strict — этот флаг мы уже включали вручную в предыдущем уроке, а теперь он задан по умолчанию.

От флагов к конфигу

Все флаги, с которыми мы работали в предыдущих уроках, превращаются в обычные ключи объекта compilerOptions:

Флаг в командной строке Ключ в tsconfig.json
--target es2020 "target": "es2020"
--strict "strict": true
--noEmit "noEmit": true
--removeComments "removeComments": true
--allowJs --checkJs "allowJs": true, "checkJs": true

Если хотите увидеть, какие настройки tsc реально применяет — включая те, что вы не указали явно и которые подставились по умолчанию, — выполните npx tsc --showConfig. Команда выводит в консоль полный итоговый конфиг, без необходимости лезть в документацию.

Организуем файлы: rootDir и outDir

Шаг 3: Переносим исходники в src

Обновите tsconfig.json, добавив пути для исходников и результата компиляции:

{
  "compilerOptions": {
    "target": "es2020",
    "module": "commonjs",
    "strict": true,
    "rootDir": "src",
    "outDir": "dist",
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}

Создайте папку src и файл src/index.ts:

function double(x: number): number {
  return x * 2;
}
 
console.log(double(21));

Шаг 4: Компилируем без единого флага

Теперь просто запустите:

npx tsc

Компилятор сам найдёт tsconfig.json, прочитает файлы из src и создаст результат в dist:

"use strict";
function double(x) {
    return x * 2;
}
console.log(double(21));

Никаких --target, --strict или --outDir в командной строке — всё уже прописано в конфиге один раз.

Бонус: удобные npm-скрипты

  1. Добавьте в package.json скрипт "build": "tsc", чтобы команда запускала сборку через npm run build, а не вспоминала путь к tsc.
  2. Добавьте туда же "typecheck": "tsc --noEmit" для проверки типов в CI без создания файлов.
  3. Используйте npx tsc --showConfig, если конфиг наследуется из нескольких файлов и не очевидно, какие настройки применяются в итоге.

Не переписывайте package.json вручную ради пары скриптов — сразу заводите привычку добавлять туда каждую часто используемую команду проекта. Через пару уроков, когда появятся тесты и линтер, такой файл станет единой точкой входа для всей команды.

Итог

Сегодня мы перешли от разрозненных CLI-флагов к полноценной настройке проекта:

  1. Установили typescript как dev-зависимость, а не глобально — версия компилятора теперь зафиксирована в проекте.
  2. Сгенерировали tsconfig.json командой tsc --init вместо ручного написания конфига.
  3. Перенесли уже знакомые флаги — target, strict, noEmit — в постоянные настройки конфига.
  4. Разделили исходники и результат компиляции через rootDir и outDir.

В следующем уроке разберём tsconfig.json подробнее и посмотрим, какие ещё файлы — декларации типов, карты исходников — умеет создавать компилятор.

Теги: