diff --git a/node-persist/node-persist-tests.ts b/node-persist/node-persist-tests.ts
new file mode 100644
index 0000000000..a4e2af1ed9
--- /dev/null
+++ b/node-persist/node-persist-tests.ts
@@ -0,0 +1,47 @@
+///
+// node-persist tests
+// compile with --module=common
+
+import nodePersist = require("node-persist");
+
+var opts = Node
+nodePersist.init({
+ dir: __dirname + "/test",
+ continuous: false
+});
+nodePersist.setItem("someArray", [1,2,3], (err)=> {
+ nodePersist.getItem("someArray", (err: any, value: any)=> {
+ nodePersist.removeItem("someArray", (err) => err);
+ });
+});
+nodePersist.setItem("someString", "foo")
+ .then(() => nodePersist.getItem("someString"))
+ .then(() => nodePersist.removeItem("someString"))
+ .then(() => nodePersist.clear())
+ .then(() => null);
+
+interface TestObject {
+ foo: string;
+ two: number;
+}
+nodePersist.clear((err) => {
+ var testObject: TestObject = {foo: "bar", two: 2};
+ nodePersist.setItemSync("someObject", testObject);
+ testObject = nodePersist.getItemSync("someObject");
+ nodePersist.removeItem("someObject");
+ nodePersist.clearSync();
+});
+
+var values: Array = nodePersist.values();
+var valuesWithKeyMatch: Array = nodePersist.valuesWithKeyMatch("some");
+var keys: Array = nodePersist.keys();
+var size: number = nodePersist.length();
+nodePersist.forEach((val) => {});
+try {
+ nodePersist.persist((err) => err);
+ nodePersist.persist().then(() => null);
+ nodePersist.persistSync;
+ nodePersist.persistKey("this", (err) => null);
+ nodePersist.persistKey("this").then(() => null);
+ nodePersist.persistKeySync("this");
+} catch(anyError){}
diff --git a/node-persist/node-persist.d.ts b/node-persist/node-persist.d.ts
new file mode 100644
index 0000000000..23c86bd5cb
--- /dev/null
+++ b/node-persist/node-persist.d.ts
@@ -0,0 +1,44 @@
+// Type definitions for node-persist
+// Project: https://github.com/simonlast/node-persist
+// Definitions by: Spencer Williams
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+///
+
+declare module "node-persist" {
+ type milliseconds = number;
+ module NodePersist {
+ export interface InitOptions {
+ dir?: string;
+ stringify?: (toSerialize: any)=>string;
+ parse?: (serialized: string)=>any;
+ encoding?: string;
+ logging?: boolean|Function;
+ continuous?: boolean;
+ interval?: milliseconds|boolean;
+ ttl?: milliseconds|boolean;
+ }
+ export function init(options?: InitOptions, callback?: Function): Q.Promise;
+ export function initSync(options?: InitOptions): void;
+ export function getItem(key: string, callback?: (err: any, value: any)=>any): Q.Promise;
+ export function getItemSync(key: string): any;
+ export function setItem(key: string, value: any, callback?: (err: any)=>any): Q.Promise;
+ export function setItemSync(key: string, value: any): void;
+ export function removeItem(key: string, callback?: (err: any)=>any): Q.Promise;
+ export function removeItemSync(key: string): void;
+ export function clear(callback?: (err: any)=>any): Q.Promise;
+ export function clearSync(): void;
+ export function values(): Array;
+ export function valuesWithKeyMatch(match: string): Array;
+ export function keys(): Array;
+ export function length(): number;
+ export function forEach(callback: (key: string, value: any)=>void): void;
+
+ export function persist(callback?: (err: any)=>any): Q.Promise;
+ export function persistSync(): void;
+ export function persistKey(key: string, callback?: (err: any)=>any): Q.Promise;
+ export function persistKeySync(key: string): void;
+ }
+ export = NodePersist;
+}