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

在模块内合并TypeScript接口

柴凌
2023-03-14

我正在尝试合并jasmine的Matcher接口。该接口在jasmine命名空间内声明。

我创造了。d、 并添加了以下内容:

declare namespace jasmine {
    interface Matchers {
        toBeSuccessful(): boolean;
    }
}

这是有效的,但是如果我尝试将导入语句添加到.d.ts文件中,它就不起作用。无法识别toBe成功函数。

我还试图将这部分代码添加到我的函数实现中,而不是d.ts文件中,但是命名空间的其他成员不再可用,例如在此代码中:

class ToBeSuccessfulMatcher implements jasmine.CustomMatcher {
    compare<T>(actual: Result<T>): jasmine.CustomMatcherResult {
    }
}

CustomMatcher和CustomMatcherResult接口不再可用。

我错过了什么?

共有1个答案

昌正奇
2023-03-14

将import语句添加到声明文件中会使其变为。d、 ts文件,并将文件中的所有声明“移动”到该模块的范围内。

所以在你的中。d、 ts文件不再与“real”命名空间jasmine在同一范围内(最有可能的是,该命名空间在全局范围内),因此您的接口匹配器也位于与real匹配器不同的范围内,并且来自不同范围的声明不会合并。

解决方案是,当您在中的顶层导入或导出时。d、 ts文件,即使用显式全局范围:

declare global {
    namespace jasmine {
        interface Matchers {
            toBeSuccessful(): boolean;
        }
    }
}

作为参考,另请参阅声明合并文档末尾的“全局扩充”。

此外,当您在实现中添加匹配器接口时,它与实际的匹配器在不同的范围内,并且它隐藏了jasmine匹配器,而不是与之合并。

 类似资料:
  • 主要内容:IShape.ts 文件代码:,Circle.ts 文件代码:,Triangle.ts 文件代码:,TestShape.ts 文件代码:,IShape.js 文件代码:,Circle.js 文件代码:,Triangle.js 文件代码:,TestShape.js 文件代码:,Circle.js 文件代码:,Triangle.js 文件代码:,TestShape.js 文件代码:TypeScript 模块的设计理念是可以更换的组织代码。 模块是在其自身的作用域里执行,并不是在全局作用域,

  • 在没有使用模块化编程的时代,会经常遇到全局变量污染、变量重名、多个文件之间存在依赖关系,需要保证一定加载顺序等问题。在模块化这种规范被提出后,得到社区和广大开发者的积极响应。 本节将介绍 TypeScript 的模块化方案,学习模块的导入导出机制,要注意 TypeScript 是怎么样兼容 CommonJS 和 AMD 规范的。 1. 慕课解释 模块在其自身的作用域里执行,而不是在全局作用域里。

  • 行动时间 - 包含到期和行记录模块 Isaac怀疑该大学的一些学生试图非法获得Wi-Fi接入。 他想将所有失败的身份验证尝试记录到专用日志文件中。 当他参与其中时,他还希望为每个学生添加一个到期日期,以防止他们在学期结束后进入网络。 为了实现这一点,他利用了FreeRADIUS中的expiration和linelog模块。 让我们看看它是如何完成的: 编辑FreeRADIUS配置目录下module

  • TypeScript 编译器会将程序中多个具有相同名称的声明合并为一个声明。 但这并不是说 TypeScript 会随意的合并两个名称相同的字符串变量,这显然是不符合语法规定的,那么本节将介绍什么样的声明可以进行合并。 1. 慕课解释 TypeScript 中的声明会创建以下三种实体之一:命名空间、类型或值。 来看以下声明都创建了什么实体: 声明类型 创建了命名空间 创建了类型 创建了值 Name

  • Web多链接合并试验过程 在创建和编辑试验时,建议使用Chrome浏览器,以达到最佳体验。 在这部分中,我们以对比两个不同页面布局,获取最优点击率为例,来说明如何使用H5多链接合并模式。 1 试验方案 一个完整的A/B 测试需要根据目前已有的用户数据进行分析判断,推断并建立假设,才能针对性的做出改变和调整,根据具体需求,构建产品A/B 测试的需求文档,即明确本次试验的几个要素。 2 新建试验 进入

  • 我正在使用ReactJS和typescript创建一个概念验证项目的初始设置,我希望在其中包含CSS模块,而不必弹出网页包配置。 以下是我迄今为止遵循的步骤: > npm安装-g创建-反应-app 创建-反应-应用程序firstapp-脚本-版本=反应-脚本-ts npm安装react-app-重新连线-保存-dev npm安装-保存-开发代码块/react-app-rewire-css-模块sa