Перейти к содержанию

Начало урока

TypeScript вместе с Node.js

Добавьте слой статических типов в реальное Node-приложение и поймите, что он делает, а чего нет

Главная идея: TypeScript -- это JavaScript плюс проверка типов на этапе компиляции. Вы расставляете аннотации, tsc доказывает их согласованность, а затем стирает все типы и выдаёт обычный JavaScript, который выполняет Node. Ни один тип не доживает до времени выполнения -- вся их ценность в пойманных ошибках, подсказках редактора и бесстрашных рефакторингах до деплоя.
К концу вы сможете:
  • объяснить, что TypeScript добавляет Node-приложению и, честно, чего он не делает;
  • настроить разумный tsconfig.json для современного сервиса на Node 18+;
  • осознанно выбирать между сборкой через tsc и прямым запуском через tsx / ts-node;
  • типизировать обработчики Express, параметры, тело запроса и middleware, а также расширять Request;
  • опираться на компилятор при безопасных, механических рефакторингах.

1. Зачем добавлять типы в Node-приложение

Вы уже строили REST API на Express, подключали SQL и MongoDB, выдавали JWT и писали тесты на Jest. В чистом JavaScript каждая граница -- тело запроса, строка из базы, переменная окружения -- по умолчанию имеет тип any: форма данных выясняется только во время выполнения, а опечатка вроде user.emial тихо превращается в undefined. TypeScript переносит это обнаружение на этап компиляции.

Конкретная польза для серверного кода:

  • Ошибки ловятся до деплоя -- опечатки в полях, неверный порядок аргументов, функция, которая может вернуть undefined, а вы это не обработали.
  • Умный редактор -- точное автодополнение по req, res, вашим сервисным объектам и сторонним библиотекам; переход к определению и встроенная документация.
  • Самодокументируемые контракты -- interface тела запроса и есть документация, и она не устареет, потому что компилятор её проверяет.
  • Бесстрашные рефакторинги -- переименуйте поле или измените сигнатуру, и компилятор перечислит все места, которые нужно поправить.
Честная оговорка: типы стираются. Во время работы программы их нет, поэтому они не могут проверить JSON-тело, пришедшее по сети, не могут проверить результат из базы и дают нулевую цену и защиту в рантайме. TypeScript доказывает, что ваш код внутренне согласован; он не доказывает, что внешний мир прислал вам обещанное. На границах всё равно нужна проверка во время выполнения.

Аналогия. TypeScript -- это проверка чертежа архитектором, а не инспектор на стройке. Проверка чертежа гарантирует, что план сам по себе непротиворечив -- нет двери в стену, нет балки, которая ничего не держит. Но он ничего не говорит о том, настоящие ли привезли кирпичи. Для кирпичей (входящих запросов) вы всё равно ставите инспектора у входа: проверку во время выполнения.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя