L08084のブログ

技術記事の執筆は、祈りに近い

エラー(error TS2503: Cannot find namespace'NodeJS'.)が発生した場合の対応メモ

はじめに

Angular5 + Typescript2でコードを書いてたら、表題のエラーに遭遇した。遭遇するの2度目なので解決方法をメモる。

f:id:l08084:20180204150857p:plain

開発環境

  • Angular@5.2.0

  • TypeScript@2.5.3

  • Node@8.1.4

エラー発生時のコード

下記コードのinterval: NodeJS.Timer;の部分でTS2503: Cannot find namespace'NodeJS'.エラーが発生した

export class AppComponent {

  interval: NodeJS.Timer; // <- ここで表題のエラーが発生

  sampleOne() {
    clearInterval(this.interval); // インターバルをリセット
    this.interval = setInterval(() => this.sampleTwo(), 250); // 250ミリ秒間隔でメソッドを呼び出す
  }
}

対応手順

# typingsをインストールしていない場合
$ npm install -g typings

$ typings install dt~node --global --save-dev
  1. プロジェクトディレクトリ上でターミナルを開き、typings install dt~node --global --save-devコマンドを実施(※) ※typingsがインストールされていない場合は、npm install -g typingsで事前にインストールが必要

  2. 上記コマンドの結果、typingsディレクトリが作成される

  3. tsconfig.json"include": ["typings/index.d.ts"]を追加

{
  "compileOnSave": false,
  // ここから
  "include": [
    "typings/index.d.ts"
  ],
  // ここまでを追加
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  }
}

参考にしたサイト

stackoverflow.com