Typescript - 不实现接口的父级接口而实现一个接口

4
我目前在项目中定义了以下接口:
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类中定义了,而接口只是定义。

本质上,我试图创建一个TypeScript类,该类是从第三方JS库扩展而来的。我有描述其实现的"d.ts"文件,但该库在其源代码形式中并非TypeScript。

为了使用第三方库中的特定函数,我必须创建一个自定义类,该类派生自他们提供的JS类,但我需要使用"prototype"进行重写,而且我需要使用TypeScript进行此操作。

更新 1

看起来读者还没有完全理解我的目标,所以让我再详细说明一下。

在我工作的项目中,我们使用一个第三方JS库,我们称之为"thirdLib.js"

在"thirdLib.js"中有一些功能,为了使用它,我需要扩展作为"thirdLib.js"一部分提供的JS风格的类,就像这样:

function myClass(){
  thirdlib.thirdclass.call(this);
}

thirdLib.utilities.extendclass(myClass, thirdLib.thirdClass);

myClass.prototype.overriddenFunc = function(){
  // Do custom function here
}

在“thirdlib”中,“extendClass”方法将我正在派生的类的构造函数复制到我的构造函数中,或者我被认为是这样做的。
然后在“thirdlib.js”中的其他地方使用它,例如:
var myStuff = new thirdLib();
var theClass = new myClass();

myStuff.registerSomething(theClass);
myStuff.doAThing();

当我调用“doAThing”时,“thirdLib.js”已经注册了新的JS类,并且该类具有“thirdClass”中所有原始功能,但是加入了我的自定义内容。
对于“thirdLib.js”,我只有JavaScript代码(压缩版)和一组TypeScript定义文件(因为没有提供lib),我需要使用正常的TypeScript功能创建“myClass()”,同时仍然扩展和使用原始JS类中的所有内容,并且能够添加我的功能到TS类中,并在这样做时覆盖基本JS类中的功能。
2022年4月更新
对于那些想知道的人,在我上次评论约6个月后,我离开了我为此项目工作的公司,所以我从未看到过它的解决方案。由于我没有代码或访问权限,我很怀疑它会得到解决。对于那些感兴趣的人,“Custom Drawing Handler”是我尝试实现的自定义绘图类,用于一个(当时是商业化,现在是OSS)第三方JS库称为“MXGraph”。

这个SO答案是否与你的问题相关? - A1rPun
很有趣,我在发布这个问题到SO之后才发现了jqfaq的帖子,并且目前正在尝试其中的想法,看看是否能够解决我的问题。虽然该问题类似但并不完全相同,因为那篇SO文章和提出的解决方案似乎都围绕着扩展内置类型展开,但是当尝试将它们应用于第三方JS库时,这种方法似乎从来没有奏效过。 - shawty
1个回答

0
如果我理解你的问题正确,你可以让myBar类继承myFoo类,从而继承给定的实现并满足接口中定义的标准。

问题在于,“myFoo”不存在。 “foo”的TS接口是一个“d.ts”文件,描述了已经存在于“foo.js”中的具体实现。由于“foo”是在JS中定义的,我无法在typescript类中扩展“foo”。 - shawty
好的,所以你想要“注入”你的自定义代码到预定义的JS库函数中,在库函数调用时执行,是吗? - Aides
有点是的。我使用的库具有绘制形状的功能,并且它有许多预定义的形状,但是要绘制自定义形状,我需要扩展其中一个现有形状,将自己的“绘制处理程序”添加到该扩展类中,然后使用该扩展类而不是使用其中一个内置形状。因此,在这种情况下,我需要更改的基本上只是“重绘”函数,但其余部分必须保持不变。不过,将来我可能还想添加其他自定义内容,例如仅适用于我的绘图函数的属性。 - shawty
你能否创建一个基本结构的fiddle,以便我可以尝试不同的选项? - Aides
JS fiddle 还是 TS fiddle?(有 TS fiddle 吗?)--- 其实算了,最好还是在我的 Github 页面上快速搭建一个简单而粗糙的示例(因为涉及混合语言)。稍后离开办公室后我会这么做。 - shawty
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接