- Главная
- Typescript
- Настройка TypeScript-проекта и tsconfig.json
Настройка TypeScript-проекта и tsconfig.json
До сих пор каждый флаг компилятора — --target, --strict, --noEmit — приходилось прописывать вручную при каждом запуске. Сегодня настроим полноценный TypeScript-проект: установим 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-скрипты
- Добавьте в
package.jsonскрипт"build": "tsc", чтобы команда запускала сборку черезnpm run build, а не вспоминала путь кtsc. - Добавьте туда же
"typecheck": "tsc --noEmit"для проверки типов в CI без создания файлов. - Используйте
npx tsc --showConfig, если конфиг наследуется из нескольких файлов и не очевидно, какие настройки применяются в итоге.
Не переписывайте package.json вручную ради пары скриптов — сразу заводите привычку добавлять туда каждую часто используемую команду проекта. Через пару уроков, когда появятся тесты и линтер, такой файл станет единой точкой входа для всей команды.
Итог
Сегодня мы перешли от разрозненных CLI-флагов к полноценной настройке проекта:
- Установили
typescriptкак dev-зависимость, а не глобально — версия компилятора теперь зафиксирована в проекте. - Сгенерировали
tsconfig.jsonкомандойtsc --initвместо ручного написания конфига. - Перенесли уже знакомые флаги —
target,strict,noEmit— в постоянные настройки конфига. - Разделили исходники и результат компиляции через
rootDirиoutDir.
В следующем уроке разберём tsconfig.json подробнее и посмотрим, какие ещё файлы — декларации типов, карты исходников — умеет создавать компилятор.