diff --git a/typescript-deferred/typescript-deferred-tests.ts b/typescript-deferred/typescript-deferred-tests.ts
new file mode 100644
index 000000000..0bfa82582
--- /dev/null
+++ b/typescript-deferred/typescript-deferred-tests.ts
@@ -0,0 +1,61 @@
+///
+
+import tsd = require('typescript-deferred');
+
+var t1: tsd.PromiseInterface = tsd.when(10)
+ .then(() => tsd.when('foo'));
+
+var t2: tsd. PromiseInterface = tsd.when(10)
+ .then(() => 'foo');
+
+var t3: tsd.PromiseInterface = tsd.when(10)
+ .then(() => 'foo', () => tsd.when('bar'));
+
+var t4: tsd.PromiseInterface = tsd.when(10)
+ .then(() => 'foo', () => 'bar');
+
+var t5: tsd.PromiseInterface = tsd.when(10)
+ .then(() => tsd.when('foo'), () => 'bar');
+
+var t6: tsd.PromiseInterface = tsd.when(10)
+ .then(() => tsd.when('foo'), () => tsd.when('bar'));
+
+var t7: tsd.PromiseInterface = tsd.when(10)
+ .always(() => 'foo');
+
+var t8: tsd.PromiseInterface = tsd.when(10)
+ .always(() => tsd.when('foo'));
+
+var t9: tsd.PromiseInterface = tsd.when(10)
+ .otherwise(() => 11);
+
+var t10: tsd.PromiseInterface = tsd.when(10)
+ .otherwise(() => tsd.when(11));
+
+var t11: tsd.PromiseInterface = tsd.when('foo');
+
+var t12: tsd.PromiseInterface = tsd.when(tsd.when('foo'));
+
+var t13: tsd.PromiseInterface = tsd.create()
+ .promise;
+
+var t14: tsd.DeferredInterface = tsd.create();
+
+var t15: tsd.ThenableInterface = tsd.when('foo');
+
+var t16: tsd.PromiseInterface = tsd.when( >tsd.when('foo'));
+
+var t17: tsd.PromiseInterface = tsd.when(10)
+ .then(() => >tsd.when('foo'), () => >tsd.when('bar'));
+
+var t18: tsd.PromiseInterface = tsd.create()
+ .resolve('foo')
+ .promise;
+
+var t19: tsd.PromiseInterface = tsd.create()
+ .resolve(tsd.when('foo'))
+ .promise;
+
+var t20: tsd.PromiseInterface = tsd.create()
+ .reject(new Error('foo'))
+ .promise;
diff --git a/typescript-deferred/typescript-deferred.d.ts b/typescript-deferred/typescript-deferred.d.ts
new file mode 100644
index 000000000..bffc65b70
--- /dev/null
+++ b/typescript-deferred/typescript-deferred.d.ts
@@ -0,0 +1,47 @@
+// Type definitions for typescript-deferred v0.1.5
+// Project: https://github.com/DirtyHairy/typescript-deferred
+// Definitions by: Christian Speckner
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module "typescript-deferred" {
+
+ export interface ImmediateSuccessCB {
+ (value: T): TP;
+ }
+ export interface ImmediateErrorCB {
+ (err: any): TP;
+ }
+ export interface DeferredSuccessCB {
+ (value: T): ThenableInterface;
+ }
+ export interface DeferredErrorCB {
+ (error: any): ThenableInterface;
+ }
+ export interface ThenableInterface {
+ then(successCB?: DeferredSuccessCB, errorCB?: DeferredErrorCB): ThenableInterface;
+ then(successCB?: DeferredSuccessCB, errorCB?: ImmediateErrorCB): ThenableInterface;
+ then(successCB?: ImmediateSuccessCB, errorCB?: DeferredErrorCB): ThenableInterface;
+ then(successCB?: ImmediateSuccessCB, errorCB?: ImmediateErrorCB): ThenableInterface;
+ }
+ export interface PromiseInterface extends ThenableInterface {
+ then(successCB?: DeferredSuccessCB, errorCB?: DeferredErrorCB): PromiseInterface;
+ then(successCB?: DeferredSuccessCB, errorCB?: ImmediateErrorCB): PromiseInterface;
+ then(successCB?: ImmediateSuccessCB, errorCB?: DeferredErrorCB): PromiseInterface;
+ then(successCB?: ImmediateSuccessCB, errorCB?: ImmediateErrorCB): PromiseInterface;
+ otherwise(errorCB?: DeferredErrorCB): PromiseInterface;
+ otherwise(errorCB?: ImmediateErrorCB): PromiseInterface;
+ always(errorCB?: DeferredErrorCB): PromiseInterface;
+ always(errorCB?: ImmediateErrorCB): PromiseInterface;
+ }
+ export interface DeferredInterface {
+ resolve(value?: ThenableInterface): DeferredInterface;
+ resolve(value?: T): DeferredInterface;
+ reject(error?: any): DeferredInterface;
+ promise: PromiseInterface;
+ }
+ export function create(): DeferredInterface;
+ export function when(value?: ThenableInterface): PromiseInterface;
+ export function when(value?: T): PromiseInterface;
+
+
+}