web-dev-qa-db-ja.com

タイプスクリプト:「モジュールが見つかりません」と有効なタイピング

TypeScriptを使用して新しいnodejsプロジェクトを開始しました。 Typings( https://github.com/typings/typings )をインストールし、それを使用してノードv4.xおよびexpress v4.xの参照ファイルをインストールしました。

私のノードバージョンはv4.2.6ですTypeScriptバージョンはv1.7.5です

私のプロジェクトディレクトリは次のようにレイアウトされます。

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

Typings/main.d.tsの内容は次のとおりです。

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

Tsconfig.jsonの内容は次のとおりです。

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

Typings.jsonの内容は次のとおりです。

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

Src/app.tsの内容は次のとおりです。

'use strict';

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

import * as express from "express";

これは非常に単純で、基本的なアプリになります。ただし、これをコンパイルしようとすると、エラーerror TS2307: Cannot find module 'express'.が表示されます

タイピングファイルを再配置し、参照パスタグの相対パスを変更してみました。ファイルでインラインタグを使用する代わりに、tsconfig.jsonのfilesフィールドを使用して参照パスを示します。また、gulp-TypeScriptgulp-tsc、およびtscをコマンドラインで直接使用してコンパイルしようとしました。

cryptohttpfsなどのnodejsビルトインモジュールを使用しようとすると、同様のエラーが発生します。

これらの参照は有効なようです-私は何が欠けていますか?

17
aaaarrgh

トリプルスラッシュディレクティブは、ファイル内のステートメントの前に置く必要があります。きみの "use strict"プロローグが来る必要がありますafterあなたの参照コメント:

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

'use strict';

import * as express from "express";

インポートの出力を取得していないコメントのフォローアップとして、TypeScriptがインポートの省略を実行するためです。何らかの値でモジュールを使用しない限り、コンパイラーはインポートを発行しません。これは、そのタイプのモジュールのみが必要であると想定しているためです。

19

ダニエルによる答えは技術的には正しいですが、tsconfig main.d.tsに基づいてまだ選択されているので、問題は修正されません。

それは私が問題を見つけてプルリクエストを送信したということです: https://github.com/jereynolds/ts-test/pull/1


  • おそらくtypingsnode_modulesを除外する必要があります。そうしないと、コンパイルに重複した識別子が含まれる(タイピング)/遅くなります(node_modules)

  • タイピングはserve-staticexpressに必要)およびmimeserve-staticに必要)をインストールします。

2
basarat

これは古い質問であり、ぶつけてすみませんが、Googleの最初のリンクの1つとして登場します。

上記は私の問題を解決しなかったので、最終的には解決したので、共有したいと思いました...私の場合、問題の原因は相対パスでした。

私のタイピングは

typings/bootstraptypings/react-domtypings/reactなど.

react-domにはimport from 'react'。コードを修正するには、'../react/react'。シンプル!

1
I Webb

上記のどれも私にとってはうまくいきませんでした-だから、これが他の人の助けになることを願っています。 (VSコードを使用しています)。

この問題は、いくつかのモジュールで参照されているサービスの1つで突然発生しました。 DIDNがサービスを使用しない完全に関連のないコンポーネントを保存した後、このサービスを使用している2つのコンポーネントが「モジュールが見つかりません」エラーを報告しました。宣言を無効なフォルダーに変更し、ファイルを保存してから正しいパスに戻すだけで修正できました。

1
Jon Vote