我有使用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,但没有帮助。
答案 0 :(得分:32)
如果您的工作目录中还有 tsconfig.app.json ,请尝试将属性节点添加到类型字段。像:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es6",
"baseUrl": "",
"types": ["node"] --> ADD THIS
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
答案 1 :(得分:3)
对于TypeScript@2.0+,请使用@types
:
npm install -D @types/node @types/jasmine
如果您仍想继续typings
,请将typings/index.d.ts
添加到您的tsconfig.json:
{
"include": [ // or "files"
"typings/index.d.ts"
]
}
答案 2 :(得分:1)
将节点添加到类型对我不起作用,"types": ["node"]
,但是将类型添加到根目录确实有效
{
"compilerOptions":
{
...
"typeRoots": [
"node_modules/@types"
]
}
}