From 817bbaddc0beca1000bc4ae48f68a5f9e12ec02a Mon Sep 17 00:00:00 2001 From: falsandtru Date: Sat, 7 Mar 2015 15:31:10 +0900 Subject: [PATCH 1/4] Fix trap suggestion --- jquery/jquery-tests.ts | 26 +++++++++++- jquery/jquery.d.ts | 91 ++++++++++++++++++++---------------------- 2 files changed, 68 insertions(+), 49 deletions(-) diff --git a/jquery/jquery-tests.ts b/jquery/jquery-tests.ts index 8a2e23cf9..13289606f 100644 --- a/jquery/jquery-tests.ts +++ b/jquery/jquery-tests.ts @@ -3212,7 +3212,7 @@ function test_EventIsCallable() { } $.when($.ajax("/my/page.json")).then(a => a.asdf); // is type JQueryPromise -$.when($.ajax("/my/page.json")).then((a?,b?,c?) => a.asdf); // is type JQueryPromise +$.when($.ajax("/my/page.json")).then((a?,b?,c?) => a.asdf); // is type JQueryPromise $.when("asdf", "jkl;").done((x,y) => x.length + y.length, (x,y) => x.length + y.length); var f1 = $.when("fetch"); // Is type JQueryPromise @@ -3370,4 +3370,26 @@ function test_promise_then_change_type() { count().done(data => { }).fail((exception: Error) => { }); -} \ No newline at end of file +} + +function test_promise_then_not_return_deferred() { + var deferred: JQueryDeferred = $.Deferred(); + deferred = deferred.progress(); + deferred = deferred.done(); + deferred = deferred.fail(); + deferred = deferred.always(); + deferred = deferred.notify(); + deferred = deferred.resolve(); + deferred = deferred.reject(); + deferred.state(); + promise = deferred.promise(); + promise = deferred.then(function () { }); + + var promise: JQueryPromise = $.Deferred().promise(); + promise = promise.then(function () { }); + promise = promise.progress(); + promise = promise.done(); + promise = promise.fail(); + promise = promise.always(); + promise.state(); +} diff --git a/jquery/jquery.d.ts b/jquery/jquery.d.ts index 8ddc072b0..3d46b3faa 100644 --- a/jquery/jquery.d.ts +++ b/jquery/jquery.d.ts @@ -276,7 +276,15 @@ interface JQueryGenericPromise { * @param doneFilter A function that is called when the Deferred is resolved. * @param failFilter An optional function that is called when the Deferred is rejected. */ - then(doneFilter: (value: T) => U|JQueryGenericPromise, failFilter?: (reason: any) => U|JQueryGenericPromise): JQueryGenericPromise; + then(doneFilter: (value: T, ...values: any[]) => U|JQueryGenericPromise, failFilter?: (...reasons: any[]) => U|JQueryGenericPromise, progressFilter?: (...progression: any[]) => any): JQueryPromise; + + /** + * Determine the current state of a Deferred object. + */ + state(): string; + + // Deprecated - given no typings + pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise; } /** @@ -293,7 +301,40 @@ interface JQueryPromiseOperator { /** * Interface for the JQuery promise, part of callbacks */ -interface JQueryPromise { +interface JQueryPromise extends JQueryGenericPromise { + /** + * Add handlers to be called when the Deferred object is either resolved or rejected. + * + * @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(alwaysCallback1?: JQueryPromiseCallback|JQueryPromiseCallback[], ...alwaysCallbacksN: Array|JQueryPromiseCallback[]>): JQueryPromise; + /** + * 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(doneCallback1?: JQueryPromiseCallback|JQueryPromiseCallback[], ...doneCallbackN: Array|JQueryPromiseCallback[]>): JQueryPromise; + /** + * 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(failCallback1?: JQueryPromiseCallback|JQueryPromiseCallback[], ...failCallbacksN: Array|JQueryPromiseCallback[]>): JQueryPromise; + /** + * 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(progressCallback1?: JQueryPromiseCallback|JQueryPromiseCallback[], ...progressCallbackN: Array|JQueryPromiseCallback[]>): JQueryPromise; +} + +/** + * Interface for the JQuery deferred, part of callbacks + */ +interface JQueryDeferred extends JQueryGenericPromise { /** * Add handlers to be called when the Deferred object is either resolved or rejected. * @@ -322,38 +363,6 @@ interface JQueryPromise { */ progress(progressCallback1?: JQueryPromiseCallback|JQueryPromiseCallback[], ...progressCallbackN: Array|JQueryPromiseCallback[]>): JQueryDeferred; - /** - * Determine the current state of a Deferred object. - */ - state(): string; - - // Deprecated - given no typings - pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise; - - /** - * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - * - * @param doneFilter A function that is called when the Deferred is resolved. - * @param failFilter An optional function that is called when the Deferred is rejected. - * @param progressFilter An optional function that is called when progress notifications are sent to the Deferred. - */ - then(doneFilter: (value: T) => U|JQueryGenericPromise, failFilter?: (...reasons: any[]) => U|JQueryGenericPromise, progressFilter?: (...progression: any[]) => any): JQueryPromise; - - // Because JQuery Promises Suck - /** - * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - * - * @param doneFilter A function that is called when the Deferred is resolved. - * @param failFilter An optional function that is called when the Deferred is rejected. - * @param progressFilter An optional function that is called when progress notifications are sent to the Deferred. - */ - then(doneFilter: (...values: any[]) => U|JQueryGenericPromise, failFilter?: (...reasons: any[]) => U|JQueryGenericPromise, progressFilter?: (...progression: any[]) => any): JQueryPromise; -} - -/** - * Interface for the JQuery deferred, part of callbacks - */ -interface JQueryDeferred extends JQueryPromise { /** * Call the progressCallbacks on a Deferred object with the given args. * @@ -765,19 +774,7 @@ interface JQueryStatic { * * @param deferreds One or more Deferred objects, or plain JavaScript objects. */ - when(...deferreds: JQueryGenericPromise[]): JQueryPromise; - /** - * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. - * - * @param deferreds One or more Deferred objects, or plain JavaScript objects. - */ - when(...deferreds: T[]): JQueryPromise; - /** - * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. - * - * @param deferreds One or more Deferred objects, or plain JavaScript objects. - */ - when(...deferreds: any[]): JQueryPromise; + when(...deferreds: Array/* as JQueryDeferred */>): JQueryPromise; /** * Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties. From bb9b1b076104da2eb3d43f8fff700ee5962b732b Mon Sep 17 00:00:00 2001 From: falsandtru Date: Sat, 7 Mar 2015 16:10:07 +0900 Subject: [PATCH 2/4] Improve test codes --- jquery/jquery-tests.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/jquery/jquery-tests.ts b/jquery/jquery-tests.ts index 13289606f..006140f2f 100644 --- a/jquery/jquery-tests.ts +++ b/jquery/jquery-tests.ts @@ -3373,7 +3373,10 @@ function test_promise_then_change_type() { } function test_promise_then_not_return_deferred() { + var state: string; + var deferred: JQueryDeferred = $.Deferred(); + state = deferred.state(); deferred = deferred.progress(); deferred = deferred.done(); deferred = deferred.fail(); @@ -3381,15 +3384,14 @@ function test_promise_then_not_return_deferred() { deferred = deferred.notify(); deferred = deferred.resolve(); deferred = deferred.reject(); - deferred.state(); promise = deferred.promise(); promise = deferred.then(function () { }); var promise: JQueryPromise = $.Deferred().promise(); + state = promise.state(); promise = promise.then(function () { }); promise = promise.progress(); promise = promise.done(); promise = promise.fail(); promise = promise.always(); - promise.state(); } From 3af6e3b8dfba7a50231b7543d941d5297c14209e Mon Sep 17 00:00:00 2001 From: falsandtru Date: Sat, 7 Mar 2015 17:00:45 +0900 Subject: [PATCH 3/4] Fix type definition --- jquery/jquery.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jquery/jquery.d.ts b/jquery/jquery.d.ts index 3d46b3faa..a2ab74ebd 100644 --- a/jquery/jquery.d.ts +++ b/jquery/jquery.d.ts @@ -276,7 +276,7 @@ interface JQueryGenericPromise { * @param doneFilter A function that is called when the Deferred is resolved. * @param failFilter An optional function that is called when the Deferred is rejected. */ - then(doneFilter: (value: T, ...values: any[]) => U|JQueryGenericPromise, failFilter?: (...reasons: any[]) => U|JQueryGenericPromise, progressFilter?: (...progression: any[]) => any): JQueryPromise; + then(doneFilter: (value: T, ...values: any[]) => U|JQueryPromise, failFilter?: (...reasons: any[]) => U|JQueryPromise, progressFilter?: (...progression: any[]) => any): JQueryPromise; /** * Determine the current state of a Deferred object. From 1dc67b231b7ac3289e29e10303516ce2a6cfb9bf Mon Sep 17 00:00:00 2001 From: falsandtru Date: Sat, 7 Mar 2015 17:01:00 +0900 Subject: [PATCH 4/4] Fix type definition --- q/Q-tests.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/q/Q-tests.ts b/q/Q-tests.ts index ff540bd6b..7872f23b2 100644 --- a/q/Q-tests.ts +++ b/q/Q-tests.ts @@ -67,6 +67,7 @@ Q.allResolved([]) declare var arrayPromise: Q.IPromise; declare var stringPromise: Q.IPromise; declare function returnsNumPromise(text: string): Q.Promise; +declare function returnsNumPromise(text: string): JQueryPromise; Q(arrayPromise) // type specification required .then(arr => arr.join(','))