类型错误:Loki 不是构造函数

问题描述

我似乎无法弄清楚为什么这不起作用

我的 Hapi.js index.ts 看起来像这样:

import { Server,Request,Responsetoolkit } from '@hapi/hapi';
import * as Loki from 'lokijs';

...

const db = new Loki(`${UPLOAD_PATH}/${DB_NAME}`,{ persistenceMethod: 'fs' });

非常直接,取自著名的 example

我的 package.json 中的脚本如下所示:

"scripts": {
"prestart": "tsc","start": "node dist/index.js",...

编译成 dist/index.js 当我运行 start 时,出现以下错误

TypeError: Loki is not a constructor

我尝试了各种方法,但我想我没有抓住重点,如果有人可以帮助我,我将不胜感激。 Loki 不是构造函数,我明白了,但是我如何实例化一个新的 Loki(),为什么同样的事情在其他地方也能正常工作?

感谢您的帮助!

解决方法

您可以执行以下任一操作:

import * as Loki from 'lokijs';
const db = new Loki.default(`${UPLOAD_PATH}/${DB_NAME}`,{ persistenceMethod: 'fs' });
// For me,I don't like this way. It looks bad.

import Loki from 'lokijs';
const db = new Loki(`${UPLOAD_PATH}/${DB_NAME}`,{ persistenceMethod: 'fs' });

在lokijs里面看,类好像导出为module.exports = factory(),相当于export default factory(),所以类导出为default。这是一个有助于理解我的意思的有用问题:ES6: "import * as alias" vs "import alias"