Typescript with jQuery UI Widgets -实现调用签名

Typescript with jQuery UI Widgets - Implementing call signatures

本文关键字:实现 调用 Widgets with jQuery UI Typescript      更新时间:2023-09-26

我有许多对话框在我的网站(登录对话框,注册对话框,联系对话框等),我试图使用Typescript建模。

jquery-ui d.s文件定义了一个Dialog接口:

interface Dialog extends Widget, DialogOptions, DialogEvents{  }

DialogOptionsDialogEvents中的所有内容都是可选的,所以没有问题,但是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。对话框界面

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

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

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