合并模块内的TypeScript接口
我正在尝试合并jasmine的Matchers接口。 接口在jasmine命名空间中声明 我已经创建了.d.ts文件并添加了以下内容:合并模块内的TypeScript接口,typescript,Typescript,我正在尝试合并jasmine的Matchers接口。 接口在jasmine命名空间中声明 我已经创建了.d.ts文件并添加了以下内容: declare namespace jasmine { interface Matchers { toBeSuccessful(): boolean; } } 这是可行的,但是如果我尝试将import语句添加到.d.ts文件中,它将不起作用。无法识别toBeSuccessful函数 我还尝试将这部分代码添加到函数的实现中,而不是
declare namespace jasmine {
interface Matchers {
toBeSuccessful(): boolean;
}
}
这是可行的,但是如果我尝试将import语句添加到.d.ts文件中,它将不起作用。无法识别toBeSuccessful函数
我还尝试将这部分代码添加到函数的实现中,而不是添加到d.ts文件中,但是,名称空间的其他成员不再可用,例如,在以下代码中:
class ToBeSuccessfulMatcher implements jasmine.CustomMatcher {
compare<T>(actual: Result<T>): jasmine.CustomMatcherResult {
}
}
类ToBeSuccessfulMatcher实现jasmine.CustomMatcher{
比较(实际:结果):jasmine.CustomMatcherResult{
}
}
CustomMatcher和CustomMatcherResult接口不再可用
我缺少什么?向声明文件添加
import
语句将该.d.ts
文件转换为一个模块,并将文件中的所有声明“移动”到该模块的范围内
因此,您的.d.ts
文件中的名称空间jasmine
与“real”名称空间jasmine
不在同一范围内(最有可能的是,该名称空间jasmine在全局范围内),因此您的接口匹配器
也在与real匹配器不同的范围内,不合并来自不同作用域的声明
当您在.d.ts
文件的顶层有导入
或导出
时,解决方案是使用显式全局
作用域:
declare global {
namespace jasmine {
interface Matchers {
toBeSuccessful(): boolean;
}
}
}
有关参考信息,请参见本文档末尾的“全局增强”
此外,当您在实现中添加匹配器
接口时,它的作用域也与真正的匹配器
不同,它隐藏了jasmine匹配器
,而不是与之合并