打字稿 - 在不实现接口父级的情况下实现接口

Typescript - implementing an interface without implementing the interfaces parents

本文关键字:实现 接口 情况下      更新时间:2023-09-26

我目前在项目中定义了以下接口

interface foo {
  fooProperty: number;
  fooFunction(): void;
}
interface bar extends foo {
  barProperty: string;
  barFunction(): void;
}

现在我想定义一个类,例如

class myBar implements bar {
  public barProperty: string ="bar";
  public barFunction() {
    // do dosmething
  }
}

但是,我也不想实现 foo 的函数和属性,因为它们已经在接口定义的现有 JS 类中定义。

从本质上讲,我要做的是创建一个打字稿类,该类是从第三方JS库扩展而来的,我有描述实现的"d.ts"文件,但它的源代码形式不在打字稿中。

为了使用第三方库中的特定函数,我必须创建一个自定义类,该类派生自他们在 JS 中提供的类,但随后我使用"原型"覆盖该类,但是我需要使用打字稿执行此操作。

更新 1

似乎阅读本文的人并不完全理解我在这里想要实现的目标,所以让我详细说明一下。

在我正在做的项目中,我们使用第三方JS库,我们称之为"ThirdLib.js"

在"threeLib.js"中有一些功能,为了使用它,需要我扩展作为"ThirdLib.js的一部分提供的JS样式类,如下所示:

function myClass(){
  thirdlib.thirdclass.call(this);
}
thirdLib.utilities.extendclass(myClass, thirdLib.thirdClass);
myClass.prototype.overriddenFunc = function(){
  // Do custom function here
}
"

threelib"中的"extendClass"方法将我派生的类的构造函数复制到我的构造函数中,或者我被引导相信。

然后稍后在

"第三库.js"EG的其他地方使用:

var myStuff = new thirdLib();
var theClass = new myClass();
myStuff.registerSomething(theClass);
myStuff.doAThing();

在我称之为"doAThing"的地方,ThirdLib.js 已经注册了新的 JS 类,并且该类具有"ThirdClass"中存在的所有原始功能,但添加了我的自定义。

我对"threeLib.js"所拥有的只是JavaScript代码(缩小)和一组Typescript定义文件(这是我自己编写的,因为没有随库提供),我需要能够使用普通的Typescript功能创建"myClass()",同时仍然扩展和使用原始JS类中的所有内容, 并且能够将我的功能添加到 TS 类中,并在我这样做时覆盖基本 JS 类中的功能。

2022 年 4 月更新

对于那些想知道的人,在我最后一次评论大约 6 个月后,我离开了我为之做这个项目的公司,所以我从来没有看到它的解决方案,因为我没有代码或访问权限了它了,我非常怀疑它永远不会得到解决。对于那些感兴趣的人,我尝试实现的"自定义绘图处理程序"是一个名为"MXGraph"的(当时是商业的,现在是OSS)第三方JS库的自定义绘图类

如果我答对了你的问题,你可以让你的类myBar扩展类myFoo,从而继承给定的实现并满足接口中定义的条件。