Maison  >  Article  >  interface Web  >  Comment j'ai résolu mon problème de configuration TypeScript : l'utilisateur de la propriété n'existe pas sur le type de demande.

Comment j'ai résolu mon problème de configuration TypeScript : l'utilisateur de la propriété n'existe pas sur le type de demande.

DDD
DDDoriginal
2024-09-18 19:47:33960parcourir

How I Fixed My TypeScript Setup Issue: Property user does not exist on type Request.

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é :

  1. J'ai créé un nouveau fichier appelé express.d.ts dans le dossier types de mon projet :
// 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
        }
    }
}
  1. J'ai mis à jour mon tsconfig.json pour m'assurer que TypeScript prend en charge ce nouveau type :
{
  "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 :

  1. Installer TypeScript globalement : J'ai réalisé que le compilateur TypeScript (tsc) n'était pas installé globalement, j'ai donc exécuté cette commande :

npm install -g typescript

  1. 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

  2. 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é.

  3. Exécuter le projet : après avoir redémarré, 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn