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を更新しますが、助けにはなりません)。
作業ディレクトリにtsconfig.app.jsonもある場合は、属性nodeをtypesフィールドに追加してみてください。お気に入り:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es6",
"baseUrl": "",
"types": ["node"] --> ADD THIS
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
[email protected]+の場合は、@types
を使用します。
npm install -D @types/node @types/jasmine
それでもtypings
を使い続けたい場合は、tsconfig.jsonにtypings/index.d.ts
を含めます。
{
"include": [ // or "files"
"typings/index.d.ts"
]
}
型にノードを追加するのがうまくいきませんでした、"types": ["node"]
しかし、タイプrootsに追加すると、
{
"compilerOptions":
{
...
"typeRoots": [
"node_modules/@types"
]
}
}