web-dev-qa-db-fra.com

Typographie: "Impossible de trouver le module" avec des typages valides

Je viens de démarrer un nouveau projet nodejs en utilisant TypeScript. J'ai installé Typings ( https://github.com/typings/typings ) et l'ai utilisé pour installer des fichiers de référence pour le nœud v4.x et exprimer v4.x.

Ma version de nœud est v4.2.6 Ma version de TypeScript est v1.7.5

Mon répertoire de projets se présente ainsi:

package.json
tsconfig.json
typings.json
src/
  app.ts
typings/
  main.d.ts
  main/ambient/node/node.d.ts
  main/ambient/express/express.d.ts

Le contenu de typings/main.d.ts est le suivant:

/// <reference path="main/ambient/express/express.d.ts" />
/// <reference path="main/ambient/node/node.d.ts" />

Le contenu de tsconfig.json est le suivant:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs"
  }
}

Le contenu de typings.json est le suivant:

{
  "dependencies": {},
  "devDependencies": {},
  "ambientDependencies": {
    "express": "github:DefinitelyTyped/DefinitelyTyped/express/express.d.ts#dd4626a4e23ce8d6d175e0fe8244a99771c8c3f2",
    "node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#1c56e368e17bb28ca57577250624ca5bd561aa81"
  }
}

Le contenu de src/app.ts est le suivant:

'use strict';

///<reference path="../typings/main.d.ts"/>

import * as express from "express";

C'est extrêmement simple et devrait aboutir à une application de base. Cependant, lorsque j'essaye de compiler cela, j'obtiens l'erreur error TS2307: Cannot find module 'express'.

J'ai essayé de réorganiser les fichiers de typage, de changer le chemin relatif dans la balise de chemin de référence, en utilisant le champ files dans tsconfig.json pour indiquer les chemins de référence au lieu d'utiliser une balise en ligne dans le fichier, en vain. J'ai également essayé de compiler en utilisant gulp-TypeScript, gulp-tsc et tsc directement sur la ligne de commande.

J'obtiens des erreurs similaires lorsque j'essaie d'utiliser les modules intégrés de nodejs tels que crypto, http, fs etc.

Ces références semblent valables - que me manque-t-il?

17
aaaarrgh

Les directives à triple barre oblique doivent précéder toutes les instructions de votre fichier. Votre "use strict" le prologue doit venir après vos commentaires de référence ainsi:

///<reference path="../typings/main.d.ts"/>

'use strict';

import * as express from "express";

Pour faire suite à votre commentaire où vous n'obtenez aucune émission pour votre importation: c'est parce que TypeScript effectue l'élision d'importation. À moins que vous n'utilisiez le module pour une certaine valeur, le compilateur n'émettra pas l'importation car il suppose que vous n'avez besoin de ce module que pour ses types.

19
Daniel Rosenwasser

La réponse de Daniel est techniquement correcte mais basée sur votre tsconfig main.d.ts aurait toujours été récupéré et ne résoudrait pas les problèmes pour vous.

Cela dit, j'ai trouvé des problèmes et envoyé une demande d'extraction: https://github.com/jereynolds/ts-test/pull/1


  • Vous devriez probablement exclure typings et node_modules sinon la compilation contiendra des identifiants en double (typages)/sera lente (node_modules)

  • dactylographie installer serve-static (nécessaire pour express) et mime (nécessaire pour serve-static).

2
basarat

Je sais que c'est une vieille question, et désolé de l'avoir heurtée, mais elle apparaît comme l'un des premiers liens de Google.

Étant donné que ce qui précède n'a pas résolu mon problème et que je l'ai finalement résolu, j'ai pensé partager ... Dans mon cas, c'est le cheminement relatif qui a causé le problème.

Mes dactylographies étaient en

typings/bootstrap, typings/react-dom, typings/react, etc.

Le react-dom on a un import from 'react'. Pour corriger mon code, j'ai dû le modifier pour qu'il soit '../react/react'. Simple!

1
I Webb

Rien de ce qui précède n'a fonctionné pour moi - j'espère donc que cela aidera quelqu'un d'autre. (J'utilise VS Code).

Ce problème m'est soudainement venu à l'improviste avec l'un de mes services, qui a été référencé dans plusieurs modules. Après avoir enregistré un composant complètement non lié qui N'A PAS UTILISÉ le service, deux des composants utilisant ce service ont signalé l'erreur "Impossible de trouver le module". J'ai pu le corriger en changeant simplement la déclaration dans un dossier non valide, en enregistrant le fichier et en le remettant dans le bon chemin.

1
Jon Vote