typescript - 如何使现有的两个接口变得相等?
问题描述
我已经有两个接口A
,B
并且有实例a
和b
.
interface A {
FA(): void;
}
interface B {
FB(): void;
}
declare const a: A;
declare const b: B;
如何使这两个接口变得相等,以便它们可以共享彼此的属性?
a.FA();
a.FB();
b.FA();
b.FB();
我努力了:
interface A extends B {}
interface B extends A {}
但失败了
类型“A”递归地将自身引用为基本类型.ts(2310)
我不想要一个 new ,因为每次都将我现有的type C = A & B
实例转换为类型很烦人。a
b
C
接口A
已存在于第 3 方库中,带有方法FA(): void
我想FB(): void
在获得实例时调用一些自定义扩展方法a
。
而这样的方法都放到了我的自定义界面B
中。
B
还有一个类定义:
class B extends MyBase {
FB() {
this.FA();
}
}
运行时部分是通过修改原型来完成的,剩下的问题就是类型检查。
解决方案
您可以使用第三个接口作为通用接口,如下所示:
interface common{
FA(): void;
FB(): void;
}
interface A extends common{
}
interface B extends common {
}
declare const a: A;
declare const b: B;
a.FA();
a.FB();
b.FA();
b.FB();
推荐阅读
- sharepoint - 使用新的办公室管理员门户创建时,无法使用 csom 获取所有网站集
- python - 如何使用 Python 从网站下载 csv 数据
- scala - 读取目录下的多个 csv 文件时创建单个模式数据框
- javascript - React redux - 对象可能是'未定义的
- ruby - 怎么清除memoist缓存?
- vba - 如何使用宏捕获 word 文档中段落中的行数?
- python - 使用 pyvmomi 获取 VirtualMachine 的当前任务
- wordpress - 如何仅在主页上使标题类别具有不同的颜色
- pyarrow - 如何过滤 pyarrow pyarrow.lib.Date32Value 值?
- node.js - 托管反应应用程序和快速服务器cpanel