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;