問題
我一直在使用 TypeScript 和 Express.js 開發 Node.js 專案。有一次,我需要將一個使用者物件附加到 Express Request 對象,但我遇到了這個 TypeScript 錯誤:
類型「Request」上不存在屬性「user」。
我很快意識到發生這種情況是因為 Express 的預設 Request 物件不包含使用者屬性,而 TypeScript 對此並不滿意。
我的初步修復
為了解決這個問題,我擴展了 Request 介面以新增使用者屬性。我是這樣做的:
// 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
在監視模式下執行 TypeScript 編譯器:我使用 --watch 標誌在工作時自動重新編譯我的 TypeScript 程式碼:
tsc --手錶
重新啟動我的程式碼編輯器:我重新啟動了我的編輯器(在我的例子中是 VS Code)以確保所有內容都已正確載入。
運行項目:重新啟動後,我再次運行該項目,它成功了!
結論
我原本以為是個小問題,結果變成了幾天的挫敗感,但我終於成功了!如果您遇到類似的問題,TypeScript 無法識別 Express 的 Request 物件上的新屬性,請記住:
正確擴充Request介面。
確保 TypeScript 的編譯器 (tsc) 已安裝並正常運作。
希望這可以幫助像我一樣被困的其他人!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3