我使用以下命令安装了节点类型定义
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.
我确信这里有一些非常基本的东西,但我无法弄明白。
少数事情
以下是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'
},
};
答案 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
现在可以使用了。