Das Problem
Ich habe an einem Node.js-Projekt mit TypeScript und Express.js gearbeitet. Irgendwann musste ich ein Benutzerobjekt an das Express Request-Objekt anhängen, aber ich stieß auf diesen TypeScript-Fehler:
Die Eigenschaft „Benutzer“ existiert nicht für den Typ „Anfrage“.
Mir wurde schnell klar, dass dies passiert, weil das standardmäßige Request-Objekt von Express keine Benutzereigenschaft enthält und TypeScript damit nicht zufrieden war.
Mein erster Fix
Um dies zu beheben, habe ich die Request-Schnittstelle erweitert, um die Benutzereigenschaft hinzuzufügen. So habe ich es gemacht:
// 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 } }
Zu diesem Zeitpunkt verschwand der Fehler aus meinem Code-Editor, sodass ich dachte, ich hätte das Problem behoben. Aber als ich versuchte, das Projekt auszuführen, stieß ich im Terminal auf einen weiteren Fehler:
Fehler TS2339: Die Eigenschaft „Benutzer“ ist im Typ „Anfrage“ nicht vorhanden.
Tagelang feststecken
Ich habe drei bis vier Tage damit verbracht, das Problem zu beheben und alles ausprobiert, was ich online finden konnte. Ich steckte völlig fest und konnte nicht herausfinden, warum es nicht funktionierte.
Die Lösung
Schließlich habe ich das Grundproblem entdeckt und es mit den folgenden Schritten behoben:
npm install -g typescript
Führen Sie den TypeScript-Compiler im Überwachungsmodus aus: Ich habe das Flag --watch verwendet, um meinen TypeScript-Code während der Arbeit automatisch neu zu kompilieren:
tsc --watch
Meinen Code-Editor neu starten: Ich habe meinen Editor (in meinem Fall VS-Code) neu gestartet, um sicherzustellen, dass alles ordnungsgemäß geladen wurde.
Projekt ausführen: Nach dem Neustart habe ich das Projekt erneut ausgeführt – und es hat funktioniert!
Abschluss
Was ich für ein kleines Problem gehalten hatte, wurde zu tagelanger Frustration, aber endlich habe ich es geschafft! Wenn Sie mit ähnlichen Problemen konfrontiert sind, weil TypeScript neue Eigenschaften im Request-Objekt von Express nicht erkennt, denken Sie daran:
Erweitern Sie die Anforderungsschnittstelle korrekt.
Stellen Sie sicher, dass der TypeScript-Compiler (tsc) installiert ist und ordnungsgemäß ausgeführt wird.
Hoffentlich hilft das allen anderen, die so feststecken wie ich!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3