Как исправить " @types/node / index.d.ts не является модулем"?

Я установил определения типов узлов, используя следующую команду

npm install --save-dev @types/node

после этого, когда я пытаюсь импортировать определения типа узла, используя следующую инструкцию

import { Process } from '@types/node';

или

import { Process } from 'node';

Я получаю следующую ошибку

[ts] File '<root_path>/node_modules/@types/node/index.d.ts' is not a module.

Я уверен, что есть что-то очень основное, чего мне не хватает здесь, но я не могу понять.

несколько вещей

  1. я использую Windows 8
  2. я использование кода Visual Studio

вот как мой tsconfig.json выглядит

{
  "compilerOptions": {
    "target": "es2015",
    "module": "commonjs",
    "outDir": "lib",
    "typeRoots": [
        "node_modules/@typings"
    ]
  },
  "exclude": [
    "node_modules"
  ]
}

а вот как мой webpackconfig.js выглядит

var path = require('path');

module.exports = {  
  entry: './ts/handler.ts',
  target: 'node',
  module: {
    loaders: [
      { test: /.ts(x?)$/, loader: 'ts-loader' },      
      { test: /.json$/, loader: 'json-loader' }
    ]
  },
  resolve: {
    extensions: ['.ts', '.js', '.tsx', '.jsx']
  },
  output: {
    libraryTarget: 'commonjs',
    path: path.join(__dirname, '.webpack'),
    filename: 'handler.js'
  },
};

2 ответов


вместо:

import { Process } from '@types/node';

вам нужно изменить свой tsconfig.json:

{
  "compilerOptions": {
    ...
    "typeRoots": ["node_modules/@types"]
  }
}

после этого переменная процесса становится доступной как глобальная.

иногда вам нужно будет импортировать из узла.модуль js, например,fs модуль. Вы можете сделать:

import * as fs from "fs";

вам не нужно импортировать fs из " node "или из"@types/node".

вы можете узнать больше здесь.


это потому, что внутри файла ввода узла любой модуль объявил с именем узел.

если вы используете

import { Process } from 'node';

TypeScript тоже попытается найти модуль или узел пространства имен

здесь вы можете загрузить полный файл с помощью

import 'node';

в вашем случае вы хотите получить только процесс из пространства имен NodeJS:

import 'NodeJS';

после этого вам просто нужно назвать это так :

class toto implements NodeJS.Process{

}

EDIT:

если вы используете TypeScript > = 2.0, вам не нужно добавлять импорт в файл, только если вы хотите "оптимизировать импорт"