diff --git a/jquery/jquery-tests.ts b/jquery/jquery-tests.ts index 37e03aa88..973818f5a 100644 --- a/jquery/jquery-tests.ts +++ b/jquery/jquery-tests.ts @@ -3164,8 +3164,11 @@ $.ajax({ function test_deferred() { - function returnPromise(): JQueryPromise<(data: { MyString: string; MyNumber: number; }, textStatus: string, jqXHR: JQueryXHR) => any> { - return $.ajax("test.php"); + function returnPromise(): JQueryPromise<{ MyString: string; MyNumber: number; }> { + return $.Deferred<{ MyString: string; MyNumber: number; }>().resolve({ + MyString: "MyString", + MyNumber: 5 + }, "failed", null); } var x = returnPromise(); x.done((data, textStatus, jqXHR) => { @@ -3190,7 +3193,7 @@ function test_deferred() { function fn3(n) { $("p").append(n + " 3 " + n); } - var dfd = $.Deferred(); + var dfd = $.Deferred(); dfd .done([fn1, fn2], fn3, [fn2, fn1]) .done(function (n) { diff --git a/jquery/jquery.d.ts b/jquery/jquery.d.ts index fb0429488..3745e5d32 100644 --- a/jquery/jquery.d.ts +++ b/jquery/jquery.d.ts @@ -287,6 +287,13 @@ interface JQueryGenericPromise { then(doneFilter: (value: T) => JQueryGenericPromise, failFilter?: (reason: any) => JQueryGenericPromise): JQueryGenericPromise; } +/** + * Interface for the JQuery promise/deferred callbacks + */ +interface JQueryPromiseCallback { + (value?: T, ...args: any[]): void; +} + /** * Interface for the JQuery promise, part of callbacks */ @@ -297,27 +304,27 @@ interface JQueryPromise { * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected. * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected. */ - always(alwaysCallbacks1?: T, ...alwaysCallbacks2: T[]): JQueryDeferred; + always(alwaysCallbacks1?: JQueryPromiseCallback, ...alwaysCallbacks2: JQueryPromiseCallback[]): JQueryDeferred; /** * Add handlers to be called when the Deferred object is resolved. * * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved. * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved. */ - done(doneCallbacks1?: T, ...doneCallbacks2: T[]): JQueryDeferred; + done(doneCallbacks1?: JQueryPromiseCallback, ...doneCallbacks2: JQueryPromiseCallback[]): JQueryDeferred; /** * Add handlers to be called when the Deferred object is rejected. * * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected. * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected. */ - fail(failCallbacks1?: T, ...failCallbacks2: T[]): JQueryDeferred; + fail(failCallbacks1?: JQueryPromiseCallback, ...failCallbacks2: JQueryPromiseCallback[]): JQueryDeferred; /** * Add handlers to be called when the Deferred object generates progress notifications. * * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications. */ - progress(...progressCallbacks: T[]): JQueryDeferred; + progress(...progressCallbacks: JQueryPromiseCallback[]): JQueryDeferred; /** * Add handlers to be called when the Deferred object is either resolved or rejected. @@ -425,27 +432,36 @@ interface JQueryDeferred extends JQueryPromise { * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected. * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected. */ - always(alwaysCallbacks1?: T, ...alwaysCallbacks2: T[]): JQueryDeferred; + always(alwaysCallbacks1?: JQueryPromiseCallback, ...alwaysCallbacks2: JQueryPromiseCallback[]): JQueryDeferred; + always(alwaysCallbacks1?: JQueryPromiseCallback[], ...alwaysCallbacks2: JQueryPromiseCallback[]): JQueryDeferred; + always(alwaysCallbacks1?: JQueryPromiseCallback, ...alwaysCallbacks2: any[]): JQueryDeferred; + always(alwaysCallbacks1?: JQueryPromiseCallback[], ...alwaysCallbacks2: any[]): JQueryDeferred; /** * Add handlers to be called when the Deferred object is resolved. * * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved. * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved. */ - done(doneCallbacks1?: T, ...doneCallbacks2: T[]): JQueryDeferred; + done(doneCallbacks1?: JQueryPromiseCallback, ...doneCallbacks2: JQueryPromiseCallback[]): JQueryDeferred; + done(doneCallbacks1?: JQueryPromiseCallback[], ...doneCallbacks2: JQueryPromiseCallback[]): JQueryDeferred; + done(doneCallbacks1?: JQueryPromiseCallback, ...doneCallbacks2: any[]): JQueryDeferred; + done(doneCallbacks1?: JQueryPromiseCallback[], ...doneCallbacks2: any[]): JQueryDeferred; /** * Add handlers to be called when the Deferred object is rejected. * * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected. * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected. */ - fail(failCallbacks1?: T, ...failCallbacks2: T[]): JQueryDeferred; + fail(failCallbacks1?: JQueryPromiseCallback, ...failCallbacks2: JQueryPromiseCallback[]): JQueryDeferred; + fail(failCallbacks1?: JQueryPromiseCallback[], ...failCallbacks2: JQueryPromiseCallback[]): JQueryDeferred; + fail(failCallbacks1?: JQueryPromiseCallback, ...failCallbacks2: any[]): JQueryDeferred; + fail(failCallbacks1?: JQueryPromiseCallback[], ...failCallbacks2: any[]): JQueryDeferred; /** * Add handlers to be called when the Deferred object generates progress notifications. * * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications. */ - progress(...progressCallbacks: T[]): JQueryDeferred; + progress(...progressCallbacks: JQueryPromiseCallback[]): JQueryDeferred; /** * Call the progressCallbacks on a Deferred object with the given args.