当前位置: 首页 > 知识库问答 >
问题:

如何重写外部TypeScript接口

山森
2023-03-14

我在一个打字稿项目中使用passport。passport的DefinitelyTyped类型定义覆盖了包含< code>user属性的Express请求。但是它将用户定义为一个空界面:

索引.d.ts

declare global {
    namespace Express {
        ...
        // tslint:disable-next-line:no-empty-interface
        interface User {}

        interface Request {
            ...
            user?: User;
            ...
        }
    }
}

然而,在我的整个应用程序中,我希望req.user是这种类型的接口:

interface User {
    id: number
    username: string,
    profilePicture: string,
    name: string
}

我厌倦了在整个应用程序中编写req.user作为user|null。我可以直接重写定义文件中的接口定义,但这似乎是不好的做法,修改<code>node_modules</code>中的文件,如果我更新类型模块,该文件可能会被覆盖。

有没有办法在我的 src 文件夹中编写覆盖 Express.User 的定义文件?我尝试将定义文件复制并修改到我的 src 目录,但它说

全局范围的增强只能直接嵌套在外部模块或环境模块声明中

如果没有声明全局tsc仍然将req.user视为空接口。

我必须在tsconfig.json中包含什么配置才能拾取此覆盖?

共有1个答案

叶浩荡
2023-03-14

合并同一范围内的接口声明。也就是说,以下

interface A {
  name: string;
}

interface A {
  id: number;
}

声明一个接口,即< code>A,具有两个属性< code>name和< code>id。

因此,只需使用护照使用的相同技术来调整类型

// ensure file is parsed as a module
export {}

declare global {
  namespace Express {
    interface User {
      id: number,
      username: string,
      profilePicture: string,
      name: string
    }
  }
}
 类似资料:
  • 我想抑制特定异常的堆栈跟踪:org。每件事。json。模式。验证异常。 这个特殊的异常在我们的应用程序中引发了很多,我想限制性能的影响。 我试着用我自己的扩展: 但是当我抓住了抑制验证时,验证异常就消失了。有没有办法实现我想做的?

  • 有什么建议吗?它不工作在模拟器或当我在我的手机上运行它。

  • 我有几个应用程序容器,我想连接到 mongodb 容器。我尝试了external_links但我无法连接到mongodb。 我得到 MongoError:第一次连接时无法连接到服务器[mongodb:27017] 我必须将容器添加到同一个网络中才能让external_links工作吗? MongoDB: 应用程序: 网络:

  • 我正在处理一个节点。js服务器,连接到MongoDB,用TypeScript编写。当我尝试使用MongoDB时,它不会创建连接,但是当我检查mongo输出时,它似乎确实创建了连接。 在节点中定义连接的代码中缺少了什么。js? 我的连接字符串是 我的连接方式: Mongo输出: 2018-11-08T23:06:24.106 0100网络[监听器]连接从127.0.0.1:51345#11接受(2个

  • 我有一个spring-boot应用程序。我有3个属性文件: jar外部的属性文件,位于Configurations/global.properties下的jar位置 jar外部的属性文件,位于Configurations/java.properties下的jar位置 问题是,我运行的是以下命令: 在我的application.properties中,我没有data.storesdb.lakeCon

  • 我想把9093暴露在码头集装箱外面。当我如下设置暴露于9093的kafka-0端口和KAFKA_ADVERTISED_LISTENERS时,我无法连接到localhost:9093,如以下docker-compose文件所示。 但是,当我换成 和 我可以连接到Kafka经纪人localhost:9092。 如何将外部端口更改为9093以使应用程序连接?我想设置多个经纪商。

  • 问题内容: 在React中,Component定义看起来像这样: 然后定义一个这样的组件: 现在我遇到的问题是,在React API 中应该使用 局部 状态对象来调用,该对象表示要更新的属性,如下所示: 请注意,未声明。我的问题是TypeScript不允许这样做,它给出了类似的赋值错误。据我了解,从这个意义上讲,定义是错误的。但是有解决方案吗? 我尝试了这个: 但这会产生相同的错误,即使它在Pla

  • 我正在为以下问题寻找一个切实可行的解决方案: 外部库提供组件作为基类。 通过扩展这些基类生成自定义组件。 当实现引发未处理的异常时,基类将中断。 基类源代码不可用。只有二进制jar。 有人知道如何用AspectJ做这个吗?