Typescript - 实现接口而不实现接口父级
Posted
技术标签:
【中文标题】Typescript - 实现接口而不实现接口父级【英文标题】:Typescript - implementing an interface without implementing the interfaces parents 【发布时间】:2016-06-20 21:33:39 【问题描述】:我目前在一个项目中定义了以下接口
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 类,它是从 3rd 方 JS 库扩展而来的.
为了使用 3rd 方库中的特定函数,我必须创建一个自定义类,该类派生自他们在 JS 中提供的类,但随后我使用“原型”覆盖它,但是我需要使用打字稿。
更新 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”EG 的其他地方使用它:
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 类中的功能.
【问题讨论】:
Is this SO answer 与您的问题有关吗? 很有趣,我刚刚在 SO 上发布此帖子后发现了 jqfaq 帖子,目前正在尝试其中的想法,看看我是否有任何收获。问题很相似,但并不完全相同,因为 SO 帖子和提议的解决方案似乎都围绕扩展内置类型展开,当尝试将它们应用于 3rd 方 JS 库时,这似乎永远不会起作用。 【参考方案1】:如果我解决了你的问题,你可以让你的类 myBar 扩展类 myFoo,从而继承给定的实现并满足接口中定义的标准。
【讨论】:
问题是,“myFoo”不存在。 "foo" 的 TS 接口是一个 "d.ts" 文件,描述了已经存在于 "foo.js" 中的具体实现。因为“foo”是在 JS 中定义的,所以我不能在 typescript 类中扩展“foo”。 这不仅仅是扩展定义,我必须创建新定义的具体实现,然后填写某些 procs 以覆盖。我会稍微更新一下我的问题,看看是否有帮助。 好的,所以您有点想将您的自定义代码“注入”到预定义的 JS lib 函数中,然后在 lib 函数调用中执行,对吧? 是的。我正在使用的库具有绘制形状的能力,并且它具有许多预定义的形状,但是要绘制自定义形状,我扩展了它们现有的形状之一,将我自己的“绘图处理程序”添加到该扩展类中,然后使用所述扩展类而不是使用它们的内置形状之一。所以基本上,在这种情况下,我需要更改的只是“重绘”功能,但其余部分必须保持不变。将来我可能还想添加其他自定义项,例如仅适用于我的绘图功能的属性。 你能创建一个基本结构的小提琴,以便我可以尝试不同的选择吗?以上是关于Typescript - 实现接口而不实现接口父级的主要内容,如果未能解决你的问题,请参考以下文章