From a9752fc8fd9650803f1b5c29ff5d7b13f402f153 Mon Sep 17 00:00:00 2001 From: John Reilly Date: Tue, 19 Nov 2013 11:39:58 +0000 Subject: [PATCH 1/3] jQuery:Added generic always/done/fail/progress --- jquery/jquery-tests.ts | 12 ++++++++++++ jquery/jquery.d.ts | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/jquery/jquery-tests.ts b/jquery/jquery-tests.ts index fa91dc6b63..f0da8f49bd 100644 --- a/jquery/jquery-tests.ts +++ b/jquery/jquery-tests.ts @@ -898,6 +898,18 @@ function test_dblclick() { } function test_deferred() { + + function returnPromise(): JQueryPromise<(data: { MyString: string; MyNumber: number; }, textStatus: string, jqXHR: JQueryXHR) => any> { + return $.ajax("test.php"); + } + var x = returnPromise(); + x.done((data, textStatus, jqXHR) => { + var myNumber: number = data.MyNumber; + var myString: string = data.MyString; + var theTextStatus: string = textStatus; + var thejqXHR: JQueryXHR = jqXHR; + }); + $.get("test.php").always(function () { alert("$.get completed with success or error callback arguments"); }); diff --git a/jquery/jquery.d.ts b/jquery/jquery.d.ts index 332ee75da7..c624299d1e 100644 --- a/jquery/jquery.d.ts +++ b/jquery/jquery.d.ts @@ -94,6 +94,12 @@ interface JQueryGenericPromise { Interface for the JQuery promise, part of callbacks */ interface JQueryPromise { + // Generic versions of callbacks + always(...alwaysCallbacks: T[]): JQueryPromise; + done(...doneCallbacks: T[]): JQueryPromise; + fail(...failCallbacks: T[]): JQueryPromise; + progress(...progressCallbacks: T[]): JQueryPromise; + always(...alwaysCallbacks: any[]): JQueryPromise; done(...doneCallbacks: any[]): JQueryPromise; fail(...failCallbacks: any[]): JQueryPromise; From 0e106b6d30325abdec9a4ec061f61c63f8786201 Mon Sep 17 00:00:00 2001 From: John Reilly Date: Tue, 19 Nov 2013 13:12:39 +0000 Subject: [PATCH 2/3] jQuery: Added JQueryDeferred Generic callbacks --- jquery/jquery.d.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jquery/jquery.d.ts b/jquery/jquery.d.ts index c624299d1e..70bbdd3791 100644 --- a/jquery/jquery.d.ts +++ b/jquery/jquery.d.ts @@ -124,6 +124,12 @@ interface JQueryPromise { Interface for the JQuery deferred, part of callbacks */ interface JQueryDeferred extends JQueryPromise { + // Generic versions of callbacks + always(...alwaysCallbacks: T[]): JQueryDeferred; + done(...doneCallbacks: T[]): JQueryDeferred; + fail(...failCallbacks: T[]): JQueryDeferred; + progress(...progressCallbacks: T[]): JQueryDeferred; + always(...alwaysCallbacks: any[]): JQueryDeferred; done(...doneCallbacks: any[]): JQueryDeferred; fail(...failCallbacks: any[]): JQueryDeferred; From c906bd8ffb98fabaad330bb0371c771a68e1fd87 Mon Sep 17 00:00:00 2001 From: John Reilly Date: Tue, 19 Nov 2013 14:55:29 +0000 Subject: [PATCH 3/3] Fixed misleading test It didn't look quite right and when I debugged it in jQuery sure enough it took 2 parameters rather than 1 (both values passed on) --- jquery/jquery-tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jquery/jquery-tests.ts b/jquery/jquery-tests.ts index f0da8f49bd..05bb4b58a6 100644 --- a/jquery/jquery-tests.ts +++ b/jquery/jquery-tests.ts @@ -2327,7 +2327,7 @@ function test_EventIsCallable() { } $.when($.ajax("/my/page.json")).then((a,b,c) => a.asdf); // is type JQueryPromise -$.when("asdf", "jkl;").done(x => x.length, x=> x.length); +$.when("asdf", "jkl;").done((x,y) => x.length + y.length, (x,y) => x.length + y.length); var f1 = $.when("fetch"); // Is type JQueryPromise var f2: JQueryPromise = f1.then(s => [s, s]);