如何修复“@ types / node / index.d.ts不是模块”?

时间:2017-06-07 15:27:36

标签: node.js typescript webpack webpack-2 typescript-typings

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

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 Code
  3. 以下是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'
      },
    };
    

3 个答案:

答案 0 :(得分:2)

而不是使用:

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

您需要更改tsconfig.json

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

执行此操作后,流程变量将变为全局变量。

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

import * as fs from "fs";

您无需从“node”或“@ types / node”导入fs

您可以了解更多here

答案 1 :(得分:2)

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

如果您使用

import { Process } from 'node';

TypeScript也会尝试找到节点模块节点名称空间

您可以在此处使用

加载完整的文件
import 'node';

在您的情况下,您只想从NodeJS命名空间获取Process:

import 'NodeJS';

你只需要这样称呼它:

class toto implements NodeJS.Process{

}

编辑:

如果您使用TypeScript&gt; = 2.0,则只有在您希望&#34;优化导入时才需要在文件中添加导入&#34;

答案 2 :(得分:0)

我刚刚在 tsconfig 文件中更改了

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

这个

"typeRoots": ["node_modules/@types"]

及其工作原理。

在那之后,我遇到了猫鼬库的问题。

Module 'mongoose' has no exported member 'QueryFindOneAndUpdateOptions'

然后我安装了mongoose版本库

npm install mongoose@5.8.1 

现在可以使用了。