- Главная
- Typescript
- Настройка TypeScript для проекта Event Me
Настройка TypeScript для проекта Event Me
В прошлом уроке мы разобрали общий план того, как будем превращать проект Event Me в полностью типизированное TypeScript-приложение — от бэкенда до фронтенда. Пора переходить от теории к практике: сегодня настроим сам проект так, чтобы TypeScript заработал в нём с нуля. Разберём установку зависимости, создание tsconfig.json и смысл ключевых опций компилятора.
Зачем настраивать TypeScript отдельно для каждого проекта
Когда мы писали учебные примеры в предыдущих уроках, TypeScript запускался локально через tsx почти без настроек. В реальном проекте так не получится: у каждого репозитория своя структура папок, своё окружение выполнения (браузер или Node.js) и свои требования к строгости проверок. Именно поэтому конфигурация не глобальная, а живёт внутри самого проекта — в файле tsconfig.json.
Event Me — это full-stack приложение, поэтому у него будут разные требования для клиентской и серверной части. Но начинать удобнее с общей базы: сначала подключаем TypeScript на уровне всего репозитория, а уже в следующих уроках будем уточнять настройки отдельно для фронтенда и бэкенда.
Устанавливаем TypeScript как dev-зависимость
TypeScript нужен только на этапе разработки — конечным пользователям он не отправляется, потому что браузер и Node.js выполняют обычный JavaScript. Поэтому TypeScript устанавливается как devDependency, а не как обычная зависимость.
npm install --save-dev typescript
После установки полезно сразу проверить, что пакет действительно появился в проекте, а не был установлен глобально:
npx tsc --version
Флаг npx запускает именно локальную версию компилятора из node_modules, а не ту, что могла быть установлена на компьютере раньше. Это важно: разные проекты могут использовать разные версии TypeScript, и локальная установка гарантирует, что все участники команды работают с одной и той же версией.
Создаём tsconfig.json
Файл tsconfig.json сообщает компилятору, как именно проверять и компилировать код. Создать его вручную можно, но проще сгенерировать заготовку командой:
npx tsc --init
Эта команда создаёт файл с десятками закомментированных опций и коротким пояснением к каждой из них. Для старта достаточно оставить лишь несколько ключевых настроек, а остальное включать по мере необходимости:
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"outDir": "dist",
"rootDir": "src"
},
"include": ["src"]
}
Обратите внимание: мы уже встречали часть этих флагов раньше — например, target разбирали в уроке про цели компиляции, а outDir и rootDir — в уроке про входные и выходные файлы tsc. Теперь мы применяем эти знания в настоящем проекте, а не в изолированном примере.
Разбираем ключевые опции компилятора
Опций в tsconfig.json много, но на старте важно понимать смысл лишь нескольких, которые сильнее всего влияют на поведение проекта.
| Опция | Что делает |
|---|---|
strict |
Включает весь набор строгих проверок сразу, включая запрет неявного any |
target |
Определяет, в какой синтаксис JavaScript компилируется код |
module |
Задаёт формат модулей на выходе (например, ESNext или CommonJS) |
esModuleInterop |
Упрощает импорт CommonJS-пакетов через синтаксис import |
skipLibCheck |
Пропускает проверку типов внутри файлов деклараций из node_modules |
Список того, за чем стоит следить в первую очередь при настройке нового проекта:
- Включён ли
strictрежим - Соответствует ли
targetреальной среде выполнения - Указаны ли корректные
includeиexclude - Не конфликтует ли
moduleс используемым бандлером
Включайте strict сразу же при создании проекта, а не «когда-нибудь потом». Добавить строгий режим в уже разросшийся проект с сотнями файлов гораздо больнее, чем поддерживать его с первого коммита — ошибок для исправления будет на порядок больше.
Применяем настройки в репозитории Event Me
После того как tsconfig.json создан, можно запустить проверку типов по всему проекту и посмотреть, сколько ошибок покажет компилятор:
npx tsc --noEmit
Флаг —noEmit мы уже разбирали в уроке про рабочий процесс с проверкой типов: он запускает проверку без создания JavaScript-файлов на выходе. Это удобно на этапе миграции — файлы ещё имеют расширение .js, а TypeScript уже может подсвечивать потенциальные проблемы, если включить параметр allowJs.
На первом запуске в реальном проекте компилятор почти всегда выдаёт список ошибок — это нормально. Задача не в том, чтобы исправить всё за один раз, а в том, чтобы двигаться постепенно: сначала избавиться от неявных any, затем — от несовпадений типов в функциях, и только потом переходить к более тонким случаям вроде дженериков и Omit, которые мы разбирали в упражнении на предыдущих уроках.
Не пытайтесь сразу выставить максимально строгие флаги вроде noUncheckedIndexedAccess в большом legacy-проекте. Начните с базового strict, стабилизируйте проект, а затем добавляйте более строгие опции по одной — так проще отслеживать, какая именно настройка добавила новую партию ошибок.
Итоги
Сегодня мы установили TypeScript как dev-зависимость проекта Event Me, сгенерировали tsconfig.json и разобрали смысл ключевых опций компилятора — strict, target, module и других. Мы также запустили первую проверку типов с флагом --noEmit и обсудили, почему миграцию лучше проводить постепенно, а не пытаться исправить все ошибки сразу.
В следующем уроке разберём базовые конфигурации — готовые наборы настроек для типовых сред вроде Node.js и React, которые позволяют не собирать tsconfig.json вручную для каждой части проекта.