問題
私は TypeScript と Express.js を使用して Node.js プロジェクトに取り組んでいます。ある時点で、Express Request オブジェクトにユーザー オブジェクトをアタッチする必要がありましたが、次の TypeScript エラーが発生しました:
プロパティ 'user' はタイプ 'Request' に存在しません。
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: プロパティ 'user' がタイプ 'Request' に存在しません。
何日も行き詰まった
この問題のトラブルシューティングに 3 ~ 4 日を費やし、オンラインで見つけられるものはすべて試しました。私は完全に行き詰まり、なぜ機能しないのか理解できませんでした。
解決策
最後に、根本的な問題を発見し、次の手順で修正しました:
npm install -g typescript
TypeScript コンパイラーを監視モードで実行する: --watch フラグを使用して、作業中に TypeScript コードを自動的に再コンパイルしました:
tsc --watch
コード エディタを再起動します: すべてが正しく読み込まれたことを確認するために、エディタ (私の場合は VS Code) を再起動しました。
プロジェクトを実行する: 再起動した後、プロジェクトを再度実行しました。うまくいきました。
結論
小さな問題だと思っていたことがイライラの日々になりましたが、ついにうまくいくようになりました。 TypeScript が Express の Request オブジェクトの新しいプロパティを認識しないという同様の問題に直面している場合は、次のことを忘れないでください。
リクエスト インターフェイスを正しく拡張します。
TypeScript のコンパイラ (tsc) がインストールされ、適切に実行されていることを確認してください。
これが、私と同じように立ち往生している他の人の助けになれば幸いです!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3