javascript - 类型缺少调用签名

标签 javascript typescript

我不确定我错过了什么,但我有一个看起来像这样的函数:

export default function (config: DatabaseConnections<DatabaseConnection>) {
  return DB['connect'](config, throwError)
}

当我尝试使用该函数时(在我的 js 测试用例中),我想像这样使用它:

const db = require('../lib/DB')
db({
  master: {
    host: 'abc123',
    user: 'abc123',
    password: 'abc123',
    database: 'abc123'
  }
})

但是,当我这样做时,出现错误:

Cannot invoke an expression whose type lacks a call signature.

当我像这样调用它时 db.default({...}) 它起作用了。我怎样才能让它导出函数,这样我就可以像这样调用它 db({...})

最佳答案

有几种方法可以解决这个问题

简单修复

您可以尝试从 require 中获取默认值:

const db = require('../lib/DB').default;

命名函数修复

您也可以尝试命名函数而不是依赖默认值。

在您的数据库文件中,尝试:

export default function db (...)

然后在你的测试文件中:

const db = require('../lib/DB').db;

您还可以仅命名和导出特定函数,而不是使用默认函数。

啦啦:

function db(...){ }
module.exports=db;

然后在你的测试文件中:

const db = require('../lib/DB');

奖金返还类型修复

由于 db 函数返回一个值,因此您需要在该函数上定义一个返回类型。

export default function (config: DatabaseConnections<DatabaseConnection>):DB {
  return DB['connect'](config, throwError);
}

关于javascript - 类型缺少调用签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47680937/

相关文章:

angular - 在 Protractor 中模拟日期

angular - 没有 Http 的提供者

javascript - 计算和输入平均速度的函数

javascript - 使用 WebGL 进行实时 DEM 数据渲染

javascript将整数字符串拆分为数组

javascript - ScriptControl WebResource加载顺序

Javascript 被注入(inject)到我的 Joomla 网站?

typescript - 我可以对 Typescript 中的变量进行类型断言,使其对整个 block /函数有效吗?

javascript - Angular 5 切换到 HttpClient 破坏了我的服务

angular - TSLint 返回预期的赋值或函数调用