Le problème
J'ai travaillé sur un projet Node.js avec TypeScript et Express.js. À un moment donné, j'ai dû attacher un objet utilisateur à l'objet Express Request, mais j'ai rencontré cette erreur TypeScript :
La propriété 'utilisateur' n'existe pas sur le type 'Demande'.
J'ai rapidement réalisé que cela se produisait parce que l'objet Request par défaut d'Express n'incluait pas de propriété utilisateur, et TypeScript n'en était pas content.
Mon correctif initial
Pour résoudre ce problème, j'ai étendu l'interface Request pour ajouter la propriété user. Voici comment j'ai procédé :
// 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 } }
À ce stade, l'erreur a disparu de mon éditeur de code, j'ai donc pensé avoir résolu le problème. Mais lorsque j'ai essayé d'exécuter le projet, j'ai rencontré une autre erreur dans le terminal :
erreur TS2339 : La propriété 'user' n'existe pas sur le type 'Request'.
Coincé pendant des jours
J'ai passé 3 à 4 jours à résoudre ce problème, en essayant tout ce que je pouvais trouver en ligne. J’étais complètement coincé et je n’arrivais pas à comprendre pourquoi ça ne fonctionnait pas.
La solution
Finalement, j'ai découvert le problème racine et je l'ai résolu en suivant ces étapes :
npm install -g typescript
Exécutez le compilateur TypeScript en mode Montre : J'ai utilisé l'indicateur --watch pour recompiler automatiquement mon code TypeScript pendant que je travaillais :
tsc --watch
Redémarrer mon éditeur de code : j'ai redémarré mon éditeur (VS Code dans mon cas) pour m'assurer que tout était correctement chargé.
Exécuter le projet : après le redémarrage, j'ai relancé le projet et cela a fonctionné !
Conclusion
Ce que je pensais être un petit problème s'est transformé en jours de frustration, mais j'ai finalement réussi à le faire fonctionner ! Si vous rencontrez des problèmes similaires avec TypeScript ne reconnaissant pas les nouvelles propriétés sur l'objet Request d'Express, n'oubliez pas de :
Étendez correctement l'interface de requête.
Assurez-vous que le compilateur TypeScript (tsc) est installé et fonctionne correctement.
J'espère que cela aidera tous ceux qui sont coincés comme moi !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!