5

Typescriptを使用してモデル化しようとしている多くのダイアログ(ログインダイアログ、登録ダイアログ、連絡先ダイアログなど)がWebサイト全体にあります。

jquery-ui d.tsファイルは、ダイアログインターフェイスを次のように定義します。

interface Dialog extends Widget, DialogOptions, DialogEvents{  }

すべてがオプションDialogOptionsDialogEventsあるため、問題はありませんが、ウィジェットインターフェイスは、私が理解していないいくつかの呼び出し署名を定義します。

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.

これらの「呼び出し署名」を実装する方法や、それらが何をすべきかを理解していません。実際、呼び出し署名が何であるかさえ理解していません。

編集:

コールシグニチャの有効なユースケースの1つのタイプは、コールバックタイピングです。

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に実装されているため、実装する必要はありません。これらのインターフェースは、静的型付けで既存のjQueryUI関数を呼び出すために使用する型情報を提供するだけです。

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

たとえばjquery-ui.d.ts、型システムがなければ、関数についてはわかりません。dialog()

于 2013-01-14T09:37:32.447 に答える