"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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.

Publié le 2024-11-02
Parcourir:135

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 a pris 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é 'utilisateur' n'existe pas sur le type 'Demande'.

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 bloqué et je n'arrivais pas à comprendre pourquoi cela 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 le redémarrage, j'ai réexécuté 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 !

Déclaration de sortie Cet article est reproduit sur : https://dev.to/nikhilagr15/how-i-fixed-my-typescript-setup-issue-property-user-does-not-exist-on-type-request-46fj?1If il y a en cas d'infraction, veuillez contacter [email protected] pour supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3