在TypeScript中导入时出现“找不到模块”的错误

4

我在导入nodejs模块时遇到了一些小问题。 对于http模块,以下语法可以正常工作:

import * as http from "http";

但是当我尝试使用“mysql2”Node.js模块时:

import * as database from "mysql2";

我遇到了一个错误:

Cannot find module 'mysql2'

而且拒绝编译那一行代码。 我甚至尝试了像这样的语法(不知道为什么):

import {database} from 'mysql2';

但是只有当我像这样写的时候才没有错误:

let database = require('mysql2');

在tsconfig.json中,我设置了:
"module": "commonjs",
"moduleResolution": "node",

当然,我已经通过npm在项目文件夹中安装了这些模块:
npm install mysql2 --save

所以我的问题是,为什么导入不起作用,在Visual Studio Code中出现错误?
2个回答

1
我认为导入失败是因为你缺少mysql2的typescript定义。你没有发布你的typings.json(或tsd.json),但我猜对于nodejs你已经导入了定义,但是对于mysql2,你必须使用纯javascript nodejs的'require'来导入它,而不能使用'import from'语法来导入'http'。

那解释了一切,谢谢! 我之前在 'mysql' 上也遇到过同样的问题,但是我安装了 DefinetlyTyped 并且错误消失了。 所以我编辑了 'mysql' 的 *d.ts 文件,改为 'mysql2'(因为它具有向后兼容的 API),现在它运行得非常好! - Michał Lytek

1
安装mysql2的typescript类型定义,步骤如下:
使用以下命令:npm install --save-dev types/mysql2#semver:version 其中version是你选择的版本。
例如: npm i --save-dev types/mysql2#semver:^1.0.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接