diff --git a/node-cache/node-cache-tests.ts b/node-cache/node-cache-tests.ts
new file mode 100644
index 0000000000..a61ec6c897
--- /dev/null
+++ b/node-cache/node-cache-tests.ts
@@ -0,0 +1,98 @@
+///
+
+import NodeCache = require('node-cache');
+
+import Options = NodeCacheTypes.Options;
+import Stats = NodeCacheTypes.Stats;
+import Callback = NodeCacheTypes.Callback;
+
+interface TypeSample {
+ a: number;
+ b: string;
+ c: boolean;
+}
+
+{
+ let options: Options;
+ let cache: NodeCacheTypes.NodeCache;
+ cache = new NodeCache();
+ cache = new NodeCache(options);
+}
+
+{
+ let cache: NodeCache;
+ let key: string;
+ let cb: Callback;
+ let result: TypeSample;
+ result = cache.get(key);
+ result = cache.get(key, cb);
+}
+
+{
+ let cache: NodeCache;
+ let keys: string[];
+ let cb: Callback<{[key: string]: TypeSample}>;
+ let result: {[key: string]: TypeSample};
+ result = cache.mget(keys);
+ result = cache.mget(keys, cb);
+}
+
+{
+ let cache: NodeCache;
+ let key: string;
+ let value: TypeSample;
+ let ttl: number|string;
+ let cb: Callback;
+ let result: boolean;
+ result = cache.set(key, value);
+ result = cache.set(key, value, ttl);
+ result = cache.set(key, value, ttl, cb);
+ result = cache.set(key, value, cb);
+}
+
+{
+ let cache: NodeCache;
+ let keys: string|string[];
+ let cb: Callback;
+ let result: number;
+ result = cache.del(keys);
+ result = cache.del(keys, cb);
+}
+
+{
+ let cache: NodeCache;
+ let key: string;
+ let ttl: number;
+ let cb: Callback;
+ let result: boolean;
+ result = cache.ttl(key);
+ result = cache.ttl(key, ttl);
+ result = cache.ttl(key, ttl, cb);
+ result = cache.ttl(key, cb);
+}
+
+{
+ let cache: NodeCache;
+ let cb: Callback;
+ let result: string[];
+ result = cache.keys();
+ result = cache.keys(cb);
+}
+
+{
+ let cache: NodeCache;
+ let result: Stats;
+ result = cache.getStats();
+}
+
+{
+ let cache: NodeCache;
+ let result: void;
+ result = cache.flushAll();
+}
+
+{
+ let cache: NodeCache;
+ let result: void;
+ result = cache.close();
+}
diff --git a/node-cache/node-cache.d.ts b/node-cache/node-cache.d.ts
new file mode 100644
index 0000000000..8e2710a427
--- /dev/null
+++ b/node-cache/node-cache.d.ts
@@ -0,0 +1,263 @@
+// Type definitions for node-cache v3.0.0
+// Project: https://github.com/tcs-de/nodecache
+// Definitions by: Ilya Mochalov
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module NodeCacheTypes {
+ interface NodeCache {
+ /** container for cached data */
+ data: Data;
+
+ /** module options */
+ options: Options;
+
+ /** statistics container */
+ stats: Stats;
+
+ /**
+ * get a cached key and change the stats
+ *
+ * @param key cache key or an array of keys
+ * @param cb Callback function
+ */
+ get(
+ key: string,
+ cb?: Callback
+ ): T;
+
+ /**
+ * get multiple cached keys at once and change the stats
+ *
+ * @param keys an array of keys
+ * @param cb Callback function
+ */
+ mget(
+ keys: string[],
+ cb?: Callback<{[key: string]: T}>
+ ): {[key: string]: T};
+
+ /**
+ * set a cached key and change the stats
+ *
+ * @param key cache key
+ * @param value A element to cache. If the option `option.forceString` is `true` the module trys to translate
+ * it to a serialized JSON
+ * @param ttl The time to live in seconds.
+ * @param cb Callback function
+ */
+ set(
+ key: string,
+ value: T,
+ ttl: number|string,
+ cb?: Callback
+ ): boolean;
+
+ set(
+ key: string,
+ value: T,
+ cb?: Callback
+ ): boolean;
+
+ /**
+ * remove keys
+ * @param keys cache key to delete or a array of cache keys
+ * @param cb Callback function
+ * @returns Number of deleted keys
+ */
+ del(
+ keys: string|string[],
+ cb?: Callback
+ ): number;
+
+ /**
+ * reset or redefine the ttl of a key. If `ttl` is not passed or set to 0 it's similar to `.del()`
+ */
+ ttl(
+ key: string,
+ ttl: number,
+ cb?: Callback
+ ): boolean;
+
+ ttl(
+ key: string,
+ cb?: Callback,
+ ttl?: number
+ ): boolean;
+
+ /**
+ * list all keys within this cache
+ * @param cb Callback function
+ * @returns An array of all keys
+ */
+ keys(cb?: Callback): string[];
+
+ /**
+ * get the stats
+ *
+ * @returns Stats data
+ */
+ getStats(): Stats;
+
+ /**
+ * flush the hole data and reset the stats
+ */
+ flushAll(): void;
+
+ /**
+ * This will clear the interval timeout which is set on checkperiod option.
+ */
+ close(): void;
+ }
+
+ interface Data {
+ [key: string]: WrappedValue;
+ }
+
+ interface Options {
+ forceString: boolean;
+ objectValueSize: number;
+ arrayValueSize: number;
+ stdTTL: number;
+ checkperiod: number;
+ useClones: boolean;
+ }
+
+ interface Stats {
+ hits: number;
+ misses: number;
+ keys: number;
+ ksize: number;
+ vsize: number;
+ }
+
+ interface WrappedValue {
+ // ttl
+ t: number;
+ // value
+ v: T;
+ }
+
+ interface Callback {
+ (err: any, data: T): void;
+ }
+}
+
+declare module "node-cache" {
+ import events = require("events");
+
+ import Data = NodeCacheTypes.Data;
+ import Options = NodeCacheTypes.Options;
+ import Stats = NodeCacheTypes.Stats;
+ import Callback = NodeCacheTypes.Callback;
+
+ class NodeCache extends events.EventEmitter implements NodeCacheTypes.NodeCache {
+ /** container for cached data */
+ data: Data;
+
+ /** module options */
+ options: Options;
+
+ /** statistics container */
+ stats: Stats;
+
+ constructor(options?: Options);
+
+ /**
+ * get a cached key and change the stats
+ *
+ * @param key cache key or an array of keys
+ * @param cb Callback function
+ */
+ get(
+ key: string,
+ cb?: Callback
+ ): T;
+
+ /**
+ * get multiple cached keys at once and change the stats
+ *
+ * @param keys an array of keys
+ * @param cb Callback function
+ */
+ mget(
+ keys: string[],
+ cb?: Callback<{[key: string]: T}>
+ ): {[key: string]: T};
+
+ /**
+ * set a cached key and change the stats
+ *
+ * @param key cache key
+ * @param value A element to cache. If the option `option.forceString` is `true` the module trys to translate
+ * it to a serialized JSON
+ * @param ttl The time to live in seconds.
+ * @param cb Callback function
+ */
+ set(
+ key: string,
+ value: T,
+ ttl: number|string,
+ cb?: Callback
+ ): boolean;
+
+ set(
+ key: string,
+ value: T,
+ cb?: Callback
+ ): boolean;
+
+ /**
+ * remove keys
+ * @param keys cache key to delete or a array of cache keys
+ * @param cb Callback function
+ * @returns Number of deleted keys
+ */
+ del(
+ keys: string|string[],
+ cb?: Callback
+ ): number;
+
+ /**
+ * reset or redefine the ttl of a key. If `ttl` is not passed or set to 0 it's similar to `.del()`
+ */
+ ttl(
+ key: string,
+ ttl: number,
+ cb?: Callback
+ ): boolean;
+
+ ttl(
+ key: string,
+ cb?: Callback,
+ ttl?: number
+ ): boolean;
+
+ /**
+ * list all keys within this cache
+ * @param cb Callback function
+ * @returns An array of all keys
+ */
+ keys(cb?: Callback): string[];
+
+ /**
+ * get the stats
+ *
+ * @returns Stats data
+ */
+ getStats(): Stats;
+
+ /**
+ * flush the hole data and reset the stats
+ */
+ flushAll(): void;
+
+ /**
+ * This will clear the interval timeout which is set on checkperiod option.
+ */
+ close(): void;
+ }
+
+ export = NodeCache;
+}