我在带有 Typescript - Node 14 的 Express js 中有一个小 API,我正在使用 fusion js 搜索数据库中的包列表。 (文件名为server.ts) 这就是 ts 代码的样子:
const fuse = new Fuse (list, options)
并且编译正常,但是当我在服务器中部署代码时显示错误
... fuse_js_1.default is not a constructor ...
所以我转到server.js结果文件,代码是这样的
const fuse = new fuse_js_1.default(list, options)
如果我删除
.default
这个词,代码看起来像这样 new fuse_js_1(list, options)
代码运行良好并且可以工作!!
有没有办法强制 Typescript 不编译这一行?或者自动删除.default?我接受你的意见和想法谢谢:)
抱歉,包英语:/
有同样的问题,解决方法是将
"esModuleInterop": true
添加到 tsconfig.json
:
{
"compilerOptions": {
"esModuleInterop": true,
},
}
发现问题,改一下
import Fuse from "fuse.js"
到
const Fuse = require("fuse.js")
:)
对于后代,如果您仅在 Jest 单元测试中遇到此问题(就像我一样)并且不想使用
require
或弄乱 tsconfig.json
,则此解决方法也有效:
// In your test file that tests something using Fuse.js
jest.mock('fuse.js', () => ({
__esModule: true,
default: jest.requireActual('fuse.js'),
}));
这基本上是强制测试使用
require
而不是 import
,而不是在生产代码中这样做。