在webpack升级后找不到命名空间NodeJS

时间:2017-03-22 01:05:59

标签: angular typescript webpack

我有使用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,但没有帮助。

3 个答案:

答案 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"
    ]
  }
}