在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);
答案 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);