Проблема
Я работал над проектом Node.js с TypeScript и Express.js. В какой-то момент мне нужно было прикрепить объект пользователя к объекту экспресс-запроса, но я столкнулся с этой ошибкой TypeScript:
Свойство «пользователь» не существует для типа «Запрос».
Я быстро понял, что это происходит потому, что объект запроса Express по умолчанию не включает свойство пользователя, и TypeScript это не понравилось.
Мое первоначальное исправление
Чтобы исправить это, я расширил интерфейс запроса, добавив свойство пользователя. Вот как я это сделал:
// src/types/express.d.ts import { User } from '@prisma/client'; // Assuming User is a Prisma model declare global { namespace Express { interface Request { user?: User; // Add user to the Request interface } } }
{ "compilerOptions": { //extra options here "typeRoots": ["./node_modules/@types", "./src/types"] // Add the types folder } }
На этом этапе ошибка исчезла из моего редактора кода, поэтому я подумал, что устранил проблему. Но когда я попытался запустить проект, я обнаружил в терминале еще одну ошибку:
ошибка TS2339: свойство «пользователь» не существует для типа «запрос».
Застрял на несколько дней
Я потратил 3-4 дня на устранение этой неполадки, перепробовав все, что смог найти в Интернете. Я полностью застрял и не мог понять, почему это не работает.
Решение
Наконец, я обнаружил корневую проблему и исправил ее, выполнив следующие действия:
npm install -g машинописный текст
Запустите компилятор TypeScript в режиме просмотра: я использовал флаг --watch для автоматической перекомпиляции кода TypeScript во время работы:
tsc --смотреть
Перезапустить редактор кода: я перезапустил редактор (в моем случае VS Code), чтобы убедиться, что все загружено правильно.
Запуск проекта: после перезапуска я снова запустил проект — и он сработал!
Заключение
То, что я думал, будет небольшой проблемой, превратилось в дни разочарования, но, наконец, мне удалось заставить это работать! Если вы столкнулись с аналогичными проблемами, когда TypeScript не распознает новые свойства объекта Request Express, не забудьте:
Правильно расширьте интерфейс запроса.
Убедитесь, что компилятор TypeScript (tsc) установлен и работает правильно.
Надеюсь, это поможет всем, кто застрял, как я!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3