5
votes

L'espace de noms 'Express' n'a pas de membre exporté 'SessionData'

J'essaye de construire un projet typeScript mais il a une erreur et je ne sais pas d'où il vient et rien n'a changé depuis la dernière fois.

node_modules/connect-mongo/src/types.d.ts:113:66 - error TS2694: Namespace 'Express' has no exported member 'SessionData'.

113         get: (sid: string, callback: (err: any, session: Express.SessionData | null) => void) => void;
                                                                     ~~~~~~~~~~~

node_modules/connect-mongo/src/types.d.ts:114:45 - error TS2694: Namespace 'Express' has no exported member 'SessionData'.

114         set: (sid: string, session: Express.SessionData, callback?: (err: any) => void) => void;
                                                ~~~~~~~~~~~

node_modules/connect-mongo/src/types.d.ts:118:47 - error TS2694: Namespace 'Express' has no exported member 'SessionData'.

118         touch: (sid: string, session: Express.SessionData, callback?: (err: any) => void) => void;
                                                  ~~~~~~~~~~~

src/controllers/http/auth/auth.ts:16:44 - error TS2339: Property 'user' does not exist on type 'Session & Partial<SessionData>'.

16             if (req.session && req.session.user) {
                                              ~~~~

src/controllers/http/auth/auth.ts:41:29 - error TS2339: Property 'user' does not exist on type 'Session & Partial<SessionData>'.

41                 req.session.user = user;
                               ~~~~

L'endroit où le tapuscrit donne une erreur

express-session voici comment il est importé


3 commentaires

Comment l'importez-vous? Pouvez-vous partager cet extrait de code s'il vous plaît


Oui, j'ai ajouté i.stack.imgur.com/HnP6K.png


Même problème ici


3 Réponses :


1
votes

Pour la vérification du type de lib connect-mongo, essayez d'ajouter l'option skipLibCheck à votre tsconfig.json

// @ts-ignore
req.session.user = user;

Pour le code en ligne, essayez d'ajouter // @ts-ignore

{
  "compilerOptions": {
    ....
    "skipLibCheck": true
  }
}

Veuillez noter que ce n'est qu'une solution de contournement, j'ai rencontré le même problème aujourd'hui lorsque j'essaie de reconstruire l'image du docker sur le DockerHub sans qu'aucun code ne soit modifié.


0 commentaires

3
votes

Je suis revenu à cette version pour résoudre le problème: "@ types / express-session": "1.15.16",


0 commentaires

1
votes

Il semble que l'interface SessionData été supprimée de l'espace de noms global Express , à l'ancienne ligne 24 le 13 octobre, et récemment publiée dans les modules DefinatelyTyped correspondants -

https://github.com/HoldYourWaffle/DefinitelyTyped/commit/0cec4865fe7fd873952fc6901553a96648a7c889#diff-c38f30a0fdd238f104a7392ff3881fa97d8b4497d75e9617163bb5f

Beaucoup de discussions ici - https://github.com/DefinitelyTyped/DefinatelyTyped/pull/46576

Je soupçonne que cela sera éventuellement mis à jour dans le code connect-mongo à un moment donné, mais en attendant, vous pouvez le contourner avec l'indicateur skipLibCheck mentionné par @benhu, ou, si vous souhaitez laisser cette fonctionnalité activée pour d'autres bibliothèques, vous pouvez ajouter l'interface dans votre propre code quelque part avec quelque chose comme ceci:

// WORKAROUND TODO: Remove when the connect-mongo types are updated
declare global {
  namespace Express {
    interface SessionData {
      cookie: any
    }
  }
}


0 commentaires