打字稿错误:此表达式不可调用。类型 'typeof import("koa-session")' 没有调用签名

Rom*_*man 4 node.js typescript

部分解决:

github上有一个老问题,对这个问题进行了一些描述。当您在全局范围内声明模块时,它会重写整个导出模块的类型。当你在一个模块中声明一个模块时,它会合并。为什么?我不知道

https://github.com/microsoft/TypeScript/issues/17736#issuecomment-344353174

我想通过接口合并来扩展第三方模块的类型。一切正常,但是当我export {};types.d.ts 中发表评论时 ,我遇到以下错误:

此表达式不可调用。类型 'typeof import("koa-session")' 没有调用签名

你能解释一下为什么会这样吗?

您可以在此处查看工作代码:https : //codesandbox.io/s/typescript-node-nocfq?file=/src/types.d.ts

Ján*_*šta 6

TypeScript github上已经解决了类似的问题。不幸的是,我现在知道可以描述它的任何其他文档页面。

注释掉export {}types.d.ts文件从模块转换为脚本。从打字稿手册

在 TypeScript 中,就像在 ECMAScript 2015 中一样,任何包含顶级导入或导出的文件都被视为一个模块。相反,没有任何顶级导入或导出声明的文件被视为脚本,其内容在全局范围内可用(因此也对模块可用)。

由于没有导出语句(也没有导入语句)的文件不是模块而是脚本,因此它没有关于任何模块的信息,并且确实会忽略“koa-session”存在现有定义的事实。

您可以在您的沙箱中尝试此操作 - 添加任何顶级importexportin types.d.ts(它可以完全未使用)将修复This expression is not callable错误。