diff --git a/onoff/onoff-tests.ts b/onoff/onoff-tests.ts
new file mode 100644
index 000000000..d838360bd
--- /dev/null
+++ b/onoff/onoff-tests.ts
@@ -0,0 +1,18 @@
+///
+///
+import * as onoff from 'onoff';
+
+var led:onoff.Gpio = new onoff.Gpio(17, 'out');
+
+var toggleLed = function():void {
+ var lastState:number = led.readSync();
+ led.writeSync(lastState ^ 1);
+};
+
+var intervalId:NodeJS.Timer = setInterval(toggleLed, 100);
+
+setTimeout(function() {
+ clearInterval(intervalId);
+ led.writeSync(0);
+ led.unexport();
+}, 2000);
diff --git a/onoff/onoff.d.ts b/onoff/onoff.d.ts
new file mode 100644
index 000000000..9a4ade593
--- /dev/null
+++ b/onoff/onoff.d.ts
@@ -0,0 +1,55 @@
+// Type definitions for onoff
+// Project: https://github.com/fivdi/onoff
+// Definitions by: Marcel Ernst
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+declare namespace __ONOFF {
+
+ var version:string;
+
+ interface GpioOptions {
+ debounceTimeout:number;
+ }
+
+ class Gpio {
+ constructor(gpio:number, direction:string);
+ constructor(gpio:number, direction:string, edge:string);
+ constructor(gpio:number, direction:string, edge:string, options:GpioOptions);
+ constructor(gpio:number, direction:string, options:GpioOptions);
+
+ gpio:number
+ gpioPath:string;
+ opts:GpioOptions;
+ readBuffer:Buffer;
+ listeners:Array<(error:Error, value:number) => void>;
+ valueFd:number;
+
+ read(cb:(err:Error, value:number) => void):void;
+ readSync():number;
+
+ write(value:number, cb:(err:Error, value:number) => void):void;
+ writeSync(value:number):void;
+
+ watch(cb:(error:Error, value:number) => void):void;
+ unwatch():void;
+ unwatch(cb:(error:Error, value:number) => void):void;
+ unwatchAll():void;
+
+ direction():string;
+ setDirection(value:string):void;
+
+ edge():string;
+ setEdge(value:string):void;
+
+ options():GpioOptions;
+
+ unexport():void;
+ }
+
+}
+
+declare module "onoff" {
+ export = __ONOFF;
+}
\ No newline at end of file