使用类实现

时间:2016-03-05 14:27:14

标签: typescript

在Typescript中,我可以用下面的另一个接口定义一个接口函数对象吗?我正在尝试定义我将在我的Ajax函数中使用的对象。

但是使用这段代码我收到了一个错误:

  

错误:(22,1)TS2346:提供的参数与呼叫目标的任何签名都不匹配。

错误在实例上设置。

interface IXHR {
    Ajax(ajax: IAjax): string;
}

interface IAjax {
    method: string;
    url: string;
    async: boolean;
    callback?: (data: string) => void;
}

class XHR implements IXHR {
    public Ajax(ajax: IAjax) {
        return ajax.url;
    }

    constructor() {}
}

let instance = new XHR();

instance.Ajax('GET', 'URL', true);

1 个答案:

答案 0 :(得分:1)

Ajax中定义的方法IXHR接受一个参数,而您尝试使用带有3个参数的实例调用它。

如果您希望它符合您的界面,您的实例调用应如下所示:

instance.Ajax({method: 'GET', url: 'URL', async: true});

另一种选择是实现IAjax接口,并使用该实现:

interface IXHR {
    Ajax(ajax: IAjax): string;
}

interface IAjax {
    method: string;
    url: string;
    async: boolean;
    callback?: (data: string) => void;
}

class Ajax implements IAjax {
    constructor(public method: string, public url: string, public async: boolean, public callback?) {

    }
}

class XHR implements IXHR {
    public Ajax(ajax: IAjax) {
        return ajax.url;
    }

    constructor() {}
}

let instance = new XHR();
let iAjax: IAjax = new Ajax('GET', 'URL', true);
instance.Ajax(iAjax);