Node.js “如何修复”@类型/节点/索引.d.ts不是模块;?

Node.js “如何修复”@类型/节点/索引.d.ts不是模块;?,node.js,typescript,webpack,webpack-2,typescript-typings,Node.js,Typescript,Webpack,Webpack 2,Typescript Typings,我已经使用以下命令安装了节点类型定义 npm install --save-dev @types/node 之后,当我尝试使用以下语句导入节点类型定义时 import { Process } from '@types/node'; 或 我得到以下错误 [ts] File '<root_path>/node_modules/@types/node/index.d.ts' is not a module. 下面是我的webpackconfig.js的外观 { "compiler

我已经使用以下命令安装了节点类型定义

npm install --save-dev @types/node
之后,当我尝试使用以下语句导入节点类型定义时

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

我得到以下错误

[ts] File '<root_path>/node_modules/@types/node/index.d.ts' is not a module.
下面是我的
webpackconfig.js
的外观

{
  "compilerOptions": {
    "target": "es2015",
    "module": "commonjs",
    "outDir": "lib",
    "typeRoots": [
        "node_modules/@typings"
    ]
  },
  "exclude": [
    "node_modules"
  ]
}
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'
  },
};
而不是使用:

import { Process } from '@types/node';
您需要更改
tsconfig.json

{
  "compilerOptions": {
    ...
    "typeRoots": ["node_modules/@types"]
  }
}
执行此操作后,流程变量将作为全局变量可用

有时需要从Node.js模块导入,例如
fs
模块。你可以做:

import * as fs from "fs";
您不需要从“节点”或“@types/node”导入
fs


您可以了解更多信息。

这是因为在节点键入文件中,任何模块都使用名称node声明

如果你使用

import { Process } from 'node';
TypeScript也将尝试查找节点模块节点命名空间

在这里,您可以使用

import 'node';
在您的情况下,您希望仅从NodeJS命名空间获取进程:

import 'NodeJS';
之后,你只需要这样称呼它:

class toto implements NodeJS.Process{

}
编辑:


如果您使用TypeScript>=2.0,您不需要在文件中添加导入,只有在您想“优化导入”时才需要添加导入

"typeRoots": ["./src/interfaces/index.d.ts"] 
这是给

"typeRoots": ["node_modules/@types"]
以及它的工作原理

之后,我面临猫鼬图书馆的问题

Module 'mongoose' has no exported member 'QueryFindOneAndUpdateOptions'
然后我安装了mongoose版本库

npm install mongoose@5.8.1 

它现在正在工作。

您不需要从
@types/node
导入。您只需要从“节点”导入。此外,您还需要将
tsconfig.json中的
typeroot
更改为
[“node_modules/@types”]
,仅从
节点导入后,embarq会出现相同的错误。更改
typeroot
后,仍然会出现相同的错误。我已经进行了更改,现在准备对其进行测试。只是一个简单的例子-所以我不能使用节点类型定义中定义的
Process
接口?我认为您可以使用
NodeJS.Process
您不需要使用import来输入和更改tsconfig中TypeScript>=2.0的任何内容。对我来说不起作用。我正在使用WebStorm。
npm install mongoose@5.8.1