5

我的网站上有很多对话框(登录对话框、注册对话框、联系人对话框等),我正在尝试使用 Typescript 进行建模。

jquery-ui d.ts 文件定义了一个对话框接口,如下所示:

interface Dialog extends Widget, DialogOptions, DialogEvents{  }

DialogOptions和中的所有DialogEvents内容都是可选的,因此那里没有问题,但是 Widget 接口定义了一些我不理解的调用签名:

interface Widget {
    (methodName: string): JQuery;
    (options: WidgetOptions): JQuery;
    (options: AccordionOptions): JQuery;
    (optionLiteral: string, optionName: string): any;
    (optionLiteral: string, options: WidgetOptions): any;
    (optionLiteral: string, optionName: string, optionValue: any): JQuery;

    (name: string, prototype: any): JQuery;
    (name: string, base: Function, prototype: any): JQuery;
}

当我尝试在一个类中实现这个接口时:

class LoginDialog implements Dialog { 

}

编译器抱怨:

Class 'LoginDialog' declares interface 'Dialog' but does not implement it: Type 'Dialog' requires a call signature, but Type 'LoginDialog' lacks one.

我不明白如何实现这些“调用签名”或者他们应该做什么,事实上,我什至不明白调用签名是什么。

编辑:

我发现调用签名的一种有效用例是回叫输入:

interface ICallback{
    (param: string) : void;
}

function someMethod(callback: ICallback){
    callback('a string'); //Good
    callback(5);         //Bad 
}

但是,问题仍然存在,因为我找不到多个调用签名的用例,并且仍然不明白如何实现 jquery-ui.d.ts 对话框接口

4

1 回答 1

5

如果您使用的是 jQuery UI,则不需要实现这些接口中的任何一个,因为它们已经在 jQuery UI 中实现了。这些接口只是为您提供类型信息,以使用静态类型调用现有的 jQuery UI 函数。

$( "#dialog" ).dialog();

例如,没有jquery-ui.d.ts类型系统就不会知道dialog()函数。

于 2013-01-14T09:37:32.447 回答