我有一个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目录中复制,也无济于事.内容是打字.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,请try 将属性node添加到types字段.比如:

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

Typescript相关问答推荐

PrimeNG Inputnumber,具有自定义号码格式器

带有微前端的动态React路由问题

如何判断输入是否是TypeScript中的品牌类型?

如果一个变量不是never类型,我如何创建编译器错误?

如果请求是流,如何等待所有响应块(Axios)

如何设置绝对路径和相对路径的类型?

打字脚本中泛型和直接类型重新映射的不同行为

APIslice-CreateAPI的RTK打字错误

如何解决类型T不能用于索引类型{ A:typeof A; B:typeof B;. }'

使用Dockerfile运行Vite React应用程序时访问env变量

使用订阅时更新AG网格中的行

MatTool提示在角垫工作台中不起作用

如何在ANGLE中注册自定义验证器

在Cypress中,是否可以在不标识错误的情况下对元素调用.Click()方法?

是否可以在类型脚本中定义条件返回类型,而不在函数体中使用类型转换?

从以下内容之一提取属性类型

如何创建一个将嵌套类属性的点表示法生成为字符串文字的类型?

打字:注解`是字符串`而不是`布尔`?

仅当定义了值时才按值筛选数组

Angular另一个组件的nativeelement未定义