首页 > 解决方案 > 如何使现有的两个接口变得相等?

问题描述

我已经有两个接口AB并且有实例ab.

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实例转换为类型很烦人。abC

接口A已存在于第 3 方库中,带有方法FA(): void

我想FB(): void在获得实例时调用一些自定义扩展方法a

而这样的方法都放到了我的自定义界面B中。 B还有一个类定义:

class B extends MyBase {
    FB() {
        this.FA();
    }
}

运行时部分是通过修改原型来完成的,剩下的问题就是类型检查。

标签: typescript

解决方案


您可以使用第三个接口作为通用接口,如下所示:

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();

PlaygroundLink


推荐阅读