Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并模块内的TypeScript接口_Typescript - Fatal编程技术网

合并模块内的TypeScript接口

合并模块内的TypeScript接口,typescript,Typescript,我正在尝试合并jasmine的Matchers接口。 接口在jasmine命名空间中声明 我已经创建了.d.ts文件并添加了以下内容: declare namespace jasmine { interface Matchers { toBeSuccessful(): boolean; } } 这是可行的,但是如果我尝试将import语句添加到.d.ts文件中,它将不起作用。无法识别toBeSuccessful函数 我还尝试将这部分代码添加到函数的实现中,而不是

我正在尝试合并jasmine的Matchers接口。 接口在jasmine命名空间中声明

我已经创建了.d.ts文件并添加了以下内容:

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
匹配器
,而不是与之合并