TypeScript вместе с Node.js
Добавьте слой статических типов в реальное Node-приложение и поймите, что он делает, а чего нет
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тела запроса и есть документация, и она не устареет, потому что компилятор её проверяет. - Бесстрашные рефакторинги -- переименуйте поле или измените сигнатуру, и компилятор перечислит все места, которые нужно поправить.
Аналогия. TypeScript -- это проверка чертежа архитектором, а не инспектор на стройке. Проверка чертежа гарантирует, что план сам по себе непротиворечив -- нет двери в стену, нет балки, которая ничего не держит. Но он ничего не говорит о том, настоящие ли привезли кирпичи. Для кирпичей (входящих запросов) вы всё равно ставите инспектора у входа: проверку во время выполнения.