web-dev-qa-db-ja.com

「@ types / node / index.d.tsはモジュールではありません」を修正する方法

次のコマンドを使用してノードタイプ定義をインストールしました

npm install --save-dev @types/node

その後、次のステートメントを使用してノードタイプ定義をインポートしようとすると

import { Process } from '@types/node';

または

import { Process } from 'node';

次のエラーが表示されます

[ts] File '<root_path>/node_modules/@types/node/index.d.ts' is not a module.

ここに欠けている非常に基本的な何かがあると確信していますが、わかりません。

もう少し

  1. Windows 8を使用しています
  2. Visual Studio Codeを使用しています

これが私のtsconfig.jsonルックス

{
  "compilerOptions": {
    "target": "es2015",
    "module": "commonjs",
    "outDir": "lib",
    "typeRoots": [
        "node_modules/@typings"
    ]
  },
  "exclude": [
    "node_modules"
  ]
}

そして、これが私のwebpackconfig.jsルックス

var path = require('path');

module.exports = {  
  entry: './ts/handler.ts',
  target: 'node',
  module: {
    loaders: [
      { test: /\.ts(x?)$/, loader: 'ts-loader' },      
      { test: /\.json$/, loader: 'json-loader' }
    ]
  },
  resolve: {
    extensions: ['.ts', '.js', '.tsx', '.jsx']
  },
  output: {
    libraryTarget: 'commonjs',
    path: path.join(__dirname, '.webpack'),
    filename: 'handler.js'
  },
};
10
Suhas

代わりに:

import { Process } from '@types/node';

tsconfig.jsonを変更する必要があります:

{
  "compilerOptions": {
    ...
    "typeRoots": ["node_modules/@types"]
  }
}

その後、プロセス変数はグローバルとして使用可能になります。

fsモジュールなどのNode.jsモジュールからインポートする必要がある場合があります。できるよ:

import * as fs from "fs";

「node」または「@ types/node」からfsをインポートする必要はありません。

詳細は こちら をご覧ください。

2
Remo H. Jansen

これは、ノードタイプファイル内で、モジュールがnodeという名前で宣言されているためです。

使用する場合

import { Process } from 'node';

TypeScriptはnode moduleまたはnode namespaceも見つけようとします

ここで、完全なファイルを使用してロードできます

import 'node';

あなたの場合、NodeJS名前空間からプロセスのみを取得したい:

import 'NodeJS';

その後、次のように呼び出す必要があります:

class toto implements NodeJS.Process{

}

編集:

TypeScript> = 2.0を使用する場合、「インポートを最適化」する場合のみ、ファイルにインポートを追加する必要はありません。

3
OrcusZ