web-dev-qa-db-ja.com

nodejsにはTypeScriptファイル内が必要です

TypeScriptクラス内から通常のNodeJSモジュールを(node_modulesから)読み込むにはどうすればよいですか?

次を含む.tsファイルをコンパイルしようとすると:

var sampleModule = require('modulename');

使用できないコンパイラプロンプトは、このスコープではrequireです。 (その行はファイルの先頭にあります)。

86
Zdenek Sejcek

TypeScriptは、シンボルが見つからない場合は常に文句を言います。コンパイラには、windowdocumentなどのデフォルト定義のセットが付属しており、lib.d.tsというファイルで指定されています。このファイルでrequireに対してgrepを実行すると、関数requireの定義が見つかりません。したがって、declare構文を使用して、実行時にこの関数が存在することをコンパイラーに伝える必要があります。

declare function require(name:string);
var sampleModule = require('modulename');

私のシステムでは、これで問題なくコンパイルできます。

95
Valentin

正しい構文は次のとおりです。

import sampleModule = require('modulename');

または

import * as sampleModule from 'modulename';

次に、--module commonjsを使用してTypeScriptをコンパイルします。

パッケージにindex.d.tsファイルが含まれておらず、package.json"typings"プロパティがない場合、tsc'modulename'が参照するものがわからないことをbarきますに。そのためには、 http://definitelytyped.org/.d.tsファイルを見つけるか、自分で作成する必要があります。

Node.jsのコードを記述している場合は、 http://definitelytyped.org/node.d.tsファイルも必要になります。

45
Jesse

最善の解決策は、ノードの型定義のコピーを取得することです。これにより、require()だけでなく、あらゆる種類の依存関係の問題が解決されます。以前はtypingsのようなパッケージを使用して行われていましたが、Mike Chamberlainが述べたように、Typingsは非推奨です。現代的な方法は次のようにそれをしています:

npm install --save-dev @types/node

コンパイラエラーを修正するだけでなく、Node AP​​Iの定義をIDEに追加します。

39
rharriso

タイピングを使用して、TypeScriptからノード関数にアクセスします。

typings install env~node --global

入力がない場合は????インストールする:

npm install typings --global
3
Oded Breiner