fuse_js_1.default 不是构造函数 | Typescript 中的 Fuse.js

问题描述 投票:0回答:3

我在带有 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?我接受你的意见和想法谢谢:)

抱歉,包英语:/

node.js typescript constructor fuse.js
3个回答
1
投票

有同样的问题,解决方法是将

"esModuleInterop": true
添加到
tsconfig.json
:

{
    "compilerOptions": {
        "esModuleInterop": true,
    },
}

0
投票

发现问题,改一下

import Fuse from "fuse.js"

const Fuse = require("fuse.js")

:)


0
投票

对于后代,如果您仅在 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
,而不是在生产代码中这样做。

© www.soinside.com 2019 - 2024. All rights reserved.