使用声明合并普遍修补接口
Posted
技术标签:
【中文标题】使用声明合并普遍修补接口【英文标题】:Universally patching an interface with declaration merging 【发布时间】:2019-03-21 03:11:27 【问题描述】:tl;dr - 我想将第三方输入的界面与我自己的界面合并,这样任何导入原始界面的人都会获得合并的界面。 这可能吗?
我正在开发一个用 javascript 和 AngularJS 编写的项目,我们已经开始改用 TypeScript。
有了这个,我们使用AngularJS typings from DefinitelyTyped,但我们想对其进行一些定制。
例如,我们想更改IController
接口,使$onInit()?: void
的定义变为$onInit(): void
以使其成为强制性。
我可以通过将声明与我自己的接口合并来实现这一点:
interface IController
$onInit(): void;
但我还没有想出如何将合并的接口应用于IController
的所有用途。
这很重要,因此我可以强制所有控制器都具有此功能,而不会让案例溜走,例如没有导入正确的接口。
这可以吗?如果有,怎么做?
PS:我尝试了很多不同的命名空间组合,但我在这方面不是太强,所以也许我还没有找到正确的咒语。
【问题讨论】:
【参考方案1】:您不能将可选方法与必需方法合并。 (听起来到目前为止,您实际上还没有合并任何东西,只是声明了一个您的代码可以使用的单独接口,而不是原始的IController
。)您必须为您的项目分叉@types/angular
类型;请参阅this answer 了解可能的执行方式的摘要。
【讨论】:
啊,这解释了为什么它当时似乎有效,尽管我可以发誓我在其他地方看到有人这样做。我希望我们不必分叉它,但我想这是生活。感谢您的帮助:)以上是关于使用声明合并普遍修补接口的主要内容,如果未能解决你的问题,请参考以下文章