diff --git a/koa-compose/koa-compose-2.3.1-tests.ts b/koa-compose/koa-compose-2.3.1-tests.ts
new file mode 100644
index 000000000..72a4e08bc
--- /dev/null
+++ b/koa-compose/koa-compose-2.3.1-tests.ts
@@ -0,0 +1,15 @@
+///
+
+import compose = require('koa-compose');
+
+var fn1: compose.Middleware = function *(next: void) {
+ console.log('in fn1');
+ yield next;
+}
+
+var fn2: compose.Middleware = function *(next: void) {
+ console.log('in fn2');
+ yield next;
+}
+
+var fn = compose([fn1, fn2]);
\ No newline at end of file
diff --git a/koa-compose/koa-compose-2.3.1.d.ts b/koa-compose/koa-compose-2.3.1.d.ts
new file mode 100644
index 000000000..f8130bf0a
--- /dev/null
+++ b/koa-compose/koa-compose-2.3.1.d.ts
@@ -0,0 +1,20 @@
+// Type definitions for koa v2.3.1
+// Project: https://github.com/koajs/compose
+// Definitions by: jKey Lu
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+declare module "koa-compose" {
+ function compose(middleware: compose.Middleware[]): compose.ComposedMiddleware;
+
+ module compose {
+ interface Middleware {
+ (next?: void): IterableIterator;
+ }
+
+ interface ComposedMiddleware {
+ (): IterableIterator;
+ }
+ }
+
+ export = compose;
+}
\ No newline at end of file
diff --git a/koa-compose/koa-compose-tests.ts b/koa-compose/koa-compose-tests.ts
new file mode 100644
index 000000000..122817929
--- /dev/null
+++ b/koa-compose/koa-compose-tests.ts
@@ -0,0 +1,18 @@
+///
+
+import compose = require('koa-compose');
+
+var fn1: compose.Middleware = function(context: any, next: () => Promise): Promise {
+ return Promise
+ .resolve(console.log('in fn1'))
+ .then(() => next());
+};
+
+var fn2: compose.Middleware = function(context: any, next: () => Promise): Promise {
+ return Promise
+ .resolve(console.log('in fn2'))
+ .then(() => next());
+};
+
+
+var fn = compose([fn1, fn2]);
\ No newline at end of file
diff --git a/koa-compose/koa-compose.d.ts b/koa-compose/koa-compose.d.ts
new file mode 100644
index 000000000..0521124b4
--- /dev/null
+++ b/koa-compose/koa-compose.d.ts
@@ -0,0 +1,20 @@
+// Type definitions for koa v3.0.0
+// Project: https://github.com/koajs/compose
+// Definitions by: jKey Lu
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+declare module "koa-compose" {
+ function compose(middleware: compose.Middleware[]): compose.ComposedMiddleware;
+
+ module compose {
+ interface Middleware {
+ (context: any, next?: () => Promise): Promise;
+ }
+
+ interface ComposedMiddleware {
+ (context: any): Promise;
+ }
+ }
+
+ export = compose;
+}
\ No newline at end of file