diff --git a/express/express.d.ts b/express/express.d.ts index d7ac6efd9..d2f994a46 100644 --- a/express/express.d.ts +++ b/express/express.d.ts @@ -780,6 +780,10 @@ interface ExpressServerResponse { charset: string; } +interface ExpressRequestFunction { + (req: ExpressServerRequest, res: ExpressServerResponse, next: Function): any; +} + interface ExpressApplication { /** * Initialize the server. @@ -1020,228 +1024,17 @@ interface ExpressApplication { render(name: string, fn: Function); - get (name: string): any; + get(name: string, ...handlers: ExpressRequestFunction[]): any; + get(name: RegExp, ...handlers: ExpressRequestFunction[]): any; - get (name: string, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + post(name: string, ...handlers: ExpressRequestFunction[]): any; + post(name: RegExp, ...handlers: ExpressRequestFunction[]): any; - get (name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + put(name: string, ...handlers: ExpressRequestFunction[]): any; + put(name: RegExp, ...handlers: ExpressRequestFunction[]): any; - get (name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - get (name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - get (name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - get (name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - ...handlers: any[]): any; - - get (name: RegExp): any; - - get (name: RegExp, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - get (name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - get (name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - get (name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - get (name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - ...handlers: any[]): any; - - post(name: string): any; - - post(name: string, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - post(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - post(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - post(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - post(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - ...handlers: any[]): any; - - post(name: RegExp): any; - - post(name: RegExp, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - post(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - post(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - post(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - post(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - ...handlers: any[]): any; - - put(name: string): any; - - put(name: string, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - put(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - put(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - put(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - put(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - ...handlers: any[]): any; - - put(name: RegExp): any; - - put(name: RegExp, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - put(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - put(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - put(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - put(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - ...handlers: any[]): any; - - del(name: string): any; - - del(name: string, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - del(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - del(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - del(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - del(name: string, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - ...handlers: any[]): any; - - del(name: RegExp): any; - - del(name: RegExp, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - del(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - del(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - del(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; - - del(name: RegExp, - handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, - ...handlers: any[]): any; + del(name: string, ...handlers: ExpressRequestFunction[]): any; + del(name: RegExp, ...handlers: ExpressRequestFunction[]): any; /** * Listen for connections. diff --git a/q/Q-tests.ts b/q/Q-tests.ts index f982ae8d6..6bdc5ff08 100644 --- a/q/Q-tests.ts +++ b/q/Q-tests.ts @@ -1,3 +1,4 @@ +/// /// import q = module('q'); @@ -40,14 +41,14 @@ Q.all([ Q.fcall(function () { }) -.then(function () { }) -.then(function () { }) -.then(function () { }) -.then(function (value4) { - // Do something with value4 -}, function (error) { - // Handle any error from step1 through step4 -}).done(); + .then(function () { }) + .then(function () { }) + .then(function () { }) + .then(function (value4) { + // Do something with value4 + }, function (error) { + // Handle any error from step1 through step4 + }).done(); Q.allResolved([]) .then(function (promises: Q.Promise[]) { @@ -58,4 +59,18 @@ Q.allResolved([]) var exception = promise.valueOf().exception; } }) -}); \ No newline at end of file +}); + +declare var arrayPromise: Q.IPromise; +declare var stringPromise: Q.IPromise; +declare function returnsNumPromise(text: string): Q.Promise; + +Q(arrayPromise) // type specification required + .then(arr => arr.join(',')) + .then(returnsNumPromise) // requires specification + .then(num => num.toFixed()); + +declare var jPromise: JQueryPromise; + +// if jQuery promises definition supported generics, this could be more interesting example +Q(jPromise).then((val) => val.toExponential()); \ No newline at end of file diff --git a/q/Q.d.ts b/q/Q.d.ts index 9fd4518f2..cadca1659 100644 --- a/q/Q.d.ts +++ b/q/Q.d.ts @@ -3,9 +3,17 @@ // Definitions by: Barrie Nemetchek, Andrew Gaspar // Definitions: https://github.com/borisyankov/DefinitelyTyped -declare function Q(value): Q.Promise; +declare function Q(value: T): Q.Promise; +declare function Q(promise: Q.IPromise): Q.Promise; declare module Q { + interface IPromise { + then(onFulfill: (value: T) => U, onReject?: (reason) => U): IPromise; + then(onFulfill: (value: T) => IPromise, onReject?: (reason) => U): IPromise; + then(onFulfill: (value: T) => U, onReject?: (reason) => IPromise): IPromise; + then(onFulfill: (value: T) => IPromise, onReject?: (reason) => IPromise): IPromise; + } + interface Deferred { promise: Promise; resolve(value: T): any; @@ -18,7 +26,12 @@ declare module Q { fail(errorCallback: Function): Promise; fin(finallyCallback: Function): Promise; finally(finallyCallback: Function): Promise; - then(onFulfilled?: (value: T) => any, onRejected?: (reason) => any, onProgress?: Function): Promise; + + then(onFulfill: (value: T) => U, onReject?: (reason) => U, onProgress?: Function): Promise; + then(onFulfill: (value: T) => IPromise, onReject?: (reason) => U, onProgress?: Function): Promise; + then(onFulfill: (value: T) => U, onReject?: (reason) => IPromise, onProgress?: Function): Promise; + then(onFulfill: (value: T) => IPromise, onReject?: (reason) => IPromise, onProgress?: Function): Promise; + spread(onFulfilled: Function, onRejected?: Function): Promise; catch(onRejected: Function): Promise; progress(onProgress: Function): Promise;