如何使用两个在typescript中实现不同接口的对象来处理函数的调用?

时间:2012-11-14 09:45:51

标签: javascript typescript

我有以下界面:

interface Ixy 
{
    X: string;
    Y: string;
}
interface Ixz 
{
    X: string;
    Z: string;
}

此功能:

export function update(json: Ixy) {
    var a = json.X;
}

从以下两个地方调用该函数:

export function update1(json: Ixy) {
   update(json);
}
export function update2(json: Ixz) {
   update(json);
}

有人可以向我解释我使用打字稿进行此工作的最佳方式。对 现在update1没问题,但update2显示签名不匹配。是唯一的 我可以解决这个问题,将json的类型改为any,或者有更好的方法 这样做?

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。可能最好的方法是创建一个具有公共属性Ixx的基础接口X,然后将其扩展为创建IxyIxz,然后实现update Ixx作为参数类型:

interface Ixx 
{
    X: string;
}

interface Ixy extends Ixx
{
    Y: string;
}
interface Ixz extends Ixx
{
    Z: string;
}

export function update(json: Ixx) {
    var a = json.X;
}

export function update1(json: Ixy) {
   update(json);
}
export function update2(json: Ixz) {
   update(json);
}

这是有效的,因为IxyIxz都延伸Ixx,因此会满足条件json is Ixx。这适用于扩展基类的类(或扩展基接口的类)。

目前还没有很多关于TypeScript的文献,所以也许对其他语言的接口进行一些一般性的介绍会很有用,因为这实际上是一个关于界面使用的跨语言问题,而不是特定于TS的任何东西。 / p>

Java接口:http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

C#接口:http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners