首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型记录错误:此表达式不可调用。类型‘Type no import("koa-session")’没有调用签名。

类型记录错误:此表达式不可调用。类型‘Type no import("koa-session")’没有调用签名。
EN

Stack Overflow用户
提问于 2020-05-22 22:39:28
回答 2查看 7.1K关注 0票数 5

部分解决:

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

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

我想通过接口合并扩展第三方模块的类型。所有操作都很好,但是当我在types.d.ts中注释types.d.ts时,会遇到以下错误:

此表达式不可调用。类型‘Type no import("koa-session")’没有调用签名。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-26 21:06:28

TypeScript github上也有一个类似的问题。不幸的是,我现在知道任何其他描述它的文档页。

注释掉后,export {}types.d.ts文件从模块转换为脚本。来自TypeScript手册

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

由于没有导出语句(和没有导入语句)的文件不是一个模块,而是一个脚本,因此它没有任何模块的信息,而且实际上将忽略“koa”的现有定义。

您可以在沙箱中尝试这一点--在import中添加任何顶级的types.d.tsexport (可以完全不使用)将修复This expression is not callable错误。

票数 6
EN

Stack Overflow用户

发布于 2020-05-25 09:21:17

如果要增强接口并进行接口合并,则需要导入该接口。你正在做的是重写它。

代码语言:javascript
复制
import Session from "koa-session";
declare module "koa-session" {
  interface Session {
    user: {
      id: number;
      username: string;
    };
  }
}

只需这样做,您将增强接口,正如您想要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61964943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档