4

TypeScript 0.8.2 とhttps://github.com/borisyankov/DefinitelyTyped/tree/master/jqueryの最新の JQuery 1.9 .d.ts 定義を使用しています

問題を切り分けるために、.when() および .then() 構文を使用して単一の $.ajax 呼び出しを行う単純な TypeScript クラス定義を用意しました。これが私のコードです:

/// <reference path="../../jquery.d.ts" />

module Demo {

    // Class
    export class TestDeferred {
        // Constructor
        constructor() {

            $.when(this.testAjaxCall()).then((data, status, jqXHR: JQueryXHR) => {
                alert(jqXHR.statusText);
            });

            $.when($.ajax("test.htm")).then(() => {
                console.log("yay");
            });
        }

        testAjaxCall() {
            return $.ajax("Test.aspx");
        }
    }
}

これらのテスト ケースの両方で、次のようなコンパイル時エラーが発生します。

指定されたパラメーターは呼び出しターゲットの署名と一致せず、赤い波線は .when() メソッドの最初のパラメーターにあります。彼はスクリーンショットです:

TypeScript JQuery 遅延コンパイルの問題

私の知る限り、.d.ts ファイルの .when() メソッドには .when(options: any) のオーバーロードがあり、.ajax は JQueryPromise インターフェイスを実装する JQueryXHR 型として定義されています。

理論的には、.when() http://api.jquery.com/jQuery.when/の jQuery ドキュメントを反映しているため、これは問題なく機能するはずです。

$.when( $.ajax("test.aspx") ).then(function(data, textStatus, jqXHR){
     alert( jqXHR.status ); // alerts 200
});

それで、私は何が欠けていますか?何か間違ったことを定義しましたか?

4

1 に答える 1

8

jQueryの型ファイルに微妙な誤りがあるかもしれません。以下の作品:

$.when( $.ajax("test.aspx") ).then(function(data, textStatus, jqXHR){
     alert( jqXHR.status );
}, null);

これは、型ファイルが成功ハンドラーと失敗ハンドラーの両方を渡すことを想定しているためです。ドキュメントを確認し、定義を更新して、障害ハンドラーがオプションであることを示します。

アップデート

jQuery 型定義に次の変更を送信しました。

then(doneCallbacks: any, failCallbacks: any, progressCallbacks?: any): JQueryPromise;

に変更

then(doneCallbacks: any, failCallbacks?: any, progressCallbacks?: any): JQueryPromise;
于 2013-01-22T21:37:27.703 に答える