diff --git a/semaphore/semaphore-tests.ts b/semaphore/semaphore-tests.ts
new file mode 100644
index 000000000..d6df36030
--- /dev/null
+++ b/semaphore/semaphore-tests.ts
@@ -0,0 +1,14 @@
+///
+
+import semaphore = require('semaphore');
+
+var sem: semaphore.Semaphore = semaphore(10);
+
+function task() {
+ console.log('My task');
+ sem.leave();
+}
+
+sem.take(task);
+sem.take(2, task);
+sem.leave(2);
diff --git a/semaphore/semaphore.d.ts b/semaphore/semaphore.d.ts
new file mode 100644
index 000000000..0a2855b82
--- /dev/null
+++ b/semaphore/semaphore.d.ts
@@ -0,0 +1,26 @@
+// Type definitions for semaphore v1.0.3
+// Project: https://github.com/abrkn/semaphore.js
+// Definitions by: Matt Frantz
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module 'semaphore' {
+
+ function semaphore(capacity?: number): semaphore.Semaphore;
+
+ module semaphore {
+
+ interface Task {
+ (): void;
+ }
+
+ interface Semaphore {
+ capacity: number;
+
+ take(task: Task): void;
+ take(n: number, task: Task): void;
+
+ leave(n?: number): void;
+ }
+ }
+ export = semaphore;
+}