gpt4 book ai didi

typescript - 在模块内合并 TypeScript 接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-30 21:39:58 28 4
gpt4 key购买 nike

我正在尝试合并 jasmine 中的 Matchers 界面。该接口(interface)在 jasmine 命名空间内声明。

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

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

这行得通,但如果我尝试向 .d.ts 文件中添加导入语句,则行不通。 toBeSuccessful 函数无法识别。

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

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

接口(interface) CustomMatcher 和 CustomMatcherResult 不再可用。

我错过了什么?

最佳答案

import 语句添加到声明文件中会将 .d.ts 文件变成一个模块,并将文件中的所有声明“移动”到该模块的范围内.

因此 .d.ts 文件中的 namespace jasmine 不再与“真实的”namespace jasmine 在同一范围内(大多数很可能,那个在全局范围内),因此您的 interface Matchers 也与真正的 Matchers 在不同的范围内,并且来自不同范围的声明不会合并.

当您在 .d.ts 文件的顶层有 importexport 时,解决方案是使用显式 global 那里的范围:

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

作为引用,另请参阅 declaration merging 末尾的“全局增强”文档。

此外,当您在实现中添加 Matchers 接口(interface)时,它再次处于与真正的 Matchers 不同的范围内,并且它隐藏了 jasmine Matchers 而不是与之合并。

关于typescript - 在模块内合并 TypeScript 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43687690/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com