diff --git a/denodeify/denodeify-tests.ts b/denodeify/denodeify-tests.ts
new file mode 100644
index 0000000000..0cd6a0c988
--- /dev/null
+++ b/denodeify/denodeify-tests.ts
@@ -0,0 +1,10 @@
+///
+///
+///
+
+import denodeify = require("denodeify");
+import fs = require('fs');
+import cp = require('child_process');
+
+const readFile = denodeify(fs.readFile);
+const exec = denodeify(cp.exec, (err, stdout, stderr) => [err, stdout]);
\ No newline at end of file
diff --git a/denodeify/denodeify.d.ts b/denodeify/denodeify.d.ts
new file mode 100644
index 0000000000..fec2fbf3cc
--- /dev/null
+++ b/denodeify/denodeify.d.ts
@@ -0,0 +1,36 @@
+// Type definitions for denodeify 1.2.1
+// Project: https://github.com/matthew-andrews/denodeify
+// Definitions by: joaomoreno
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module "denodeify" {
+ function _(fn: _.F0, transformer?: _.M): () => Promise;
+ function _(fn: _.F1, transformer?: _.M): (a:A) => Promise;
+ function _(fn: _.F2, transformer?: _.M): (a:A, b:B) => Promise;
+ function _(fn: _.F3, transformer?: _.M): (a:A, b:B, c:C) => Promise;
+ function _(fn: _.F4, transformer?: _.M): (a:A, b:B, c:C, d:D) => Promise;
+ function _(fn: _.F5, transformer?: _.M): (a:A, b:B, c:C, d:D, e:E) => Promise;
+ function _(fn: _.F6, transformer?: _.M): (a:A, b:B, c:C, d:D, e:E, f:F) => Promise;
+ function _(fn: _.F7, transformer?: _.M): (a:A, b:B, c:C, d:D, e:E, f:F, g:G) => Promise;
+ function _(fn: _.F8, transformer?: _.M): (a:A, b:B, c:C, d:D, e:E, f:F, g:G, h:H) => Promise;
+ function _(fn: _.F, transformer?: _.M): (...args: any[]) => Promise;
+
+ module _ {
+ type Callback = (err: Error, result: R) => any;
+ type F0 = (cb: Callback) => any;
+ type F1 = (a:A, cb: Callback) => any;
+ type F2 = (a:A, b:B, cb: Callback) => any;
+ type F3 = (a:A, b:B, c:C, cb: Callback) => any;
+ type F4 = (a:A, b:B, c:C, d:D, cb: Callback) => any;
+ type F5 = (a:A, b:B, c:C, d:D, e:E, cb: Callback) => any;
+ type F6 = (a:A, b:B, c:C, d:D, e:E, f:F, cb: Callback) => any;
+ type F7 = (a:A, b:B, c:C, d:D, e:E, f:F, g:G, cb: Callback) => any;
+ type F8 = (a:A, b:B, c:C, d:D, e:E, f:F, g:G, h:H, cb: Callback) => any;
+ type F = (...args: any[]) => any;
+ type M = (err: Error, ...args: any[]) => any[];
+ }
+
+ export = _;
+}
\ No newline at end of file