web-dev-qa-db-ja.com

Webpackのアップグレード後に名前空間NodeJSが見つかりません

WebPackで構築されたAngular2アプリケーションがあります。 WebPackをv1.8からv2にアップグレードしましたが、すべて正常に動作しているようです。唯一の問題は、古いコードに次のものが含まれていることです。

import Timer = NodeJS.Timer;
....
apptInterval: Timer;
....
this.apptInterval = setInterval(() => { ... }, 1000);

アップグレード後、エラーが発生します:TS2503: Cannot find namespace 'NodeJS'.

tsconfig.jsonは次のようになります。

{
"compilerOptions": {
   "target": "es5",
   "module": "commonjs",
   "moduleResolution": "node",
   "sourceMap": true,
   "emitDecoratorMetadata": true,
   "experimentalDecorators": true,
   "lib": ["es2015", "dom"],
   "noImplicitAny": true,
   "suppressImplicitAnyIndexErrors": true
   }
}

Angular/Webpackのドキュメントにはtypings.jsonがなくなりました。ただし、たとえWebpack 1ディレクトリからコピーしても、役に立ちません。内容はtypings.jsonです

{
"globalDependencies": {
  "jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
  "node": "registry:dt/node"
  }
}

興味深いことに、NodeJSへの参照を削除すると、すべてが正常に機能します。このような:

apptInterval: any;
....
this.apptInterval = setInterval(() => { ... }, 1000);

F12デバッガの下を見ると、apptIntervalのタイプはZoneTaskです。強く型付けする方法があると確信していますが、それは私をエスケープします。私が見つけた唯一の提案はtypings install dt~node --global --save-devを実行することでした(これは基本的にtypings.jsonを更新しますが、助けにはなりません)。

16
Felix

作業ディレクトリにtsconfig.app.jsonもある場合は、属性nodetypesフィールドに追加してみてください。お気に入り:

  {
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "module": "es6",
    "baseUrl": "",
    "types": ["node"] --> ADD THIS
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}
34
Fzum

[email protected]+の場合は、@typesを使用します。

npm install -D @types/node @types/jasmine

それでもtypingsを使い続けたい場合は、tsconfig.jsonにtypings/index.d.tsを含めます。

{
  "include": [   // or "files"
    "typings/index.d.ts"
  ]
}
5
unional

型にノードを追加するのがうまくいきませんでした、"types": ["node"]しかし、タイプrootsに追加すると、

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