diff --git a/eventemitter3/eventemitter3-test.ts b/eventemitter3/eventemitter3-test.ts
new file mode 100644
index 000000000..05138ab34
--- /dev/null
+++ b/eventemitter3/eventemitter3-test.ts
@@ -0,0 +1,65 @@
+///
+'use strict';
+
+import EventEmitter = require('eventemitter3');
+
+class EventEmitterTest {
+ v: EventEmitter;
+
+ constructor() {
+ this.v = new EventEmitter();
+ this.v = new EventEmitter.EventEmitter();
+ this.v = new EventEmitter.EventEmitter2();
+ this.v = new EventEmitter.EventEmitter3();
+ }
+
+ listeners() {
+ var v1: Function[] = this.v.listeners('click');
+ }
+
+ emit() {
+ var v1: boolean = this.v.emit('click');
+ var v2: boolean = this.v.emit('click', 1);
+ var v3: boolean = this.v.emit('click', 1, '1');
+ var v4: boolean = this.v.emit('click', 1, '1', true);
+ var v5: boolean = this.v.emit('click', 1, '1', true, new Date());
+ }
+
+ on() {
+ var fn = () => console.log(1);
+ var v1: EventEmitter = this.v.on('click', fn);
+ var v2: EventEmitter = this.v.on('click', fn, this);
+ }
+
+ once() {
+ var fn = () => console.log(1);
+ var v1: EventEmitter = this.v.once('click', fn);
+ var v2: EventEmitter = this.v.once('click', fn, this);
+ }
+
+ removeListener() {
+ var fn = () => console.log(1);
+ var v1: EventEmitter = this.v.removeListener('click', fn);
+ var v2: EventEmitter = this.v.removeListener('click', fn, true);
+ }
+
+ removeAllListeners() {
+ var v1: EventEmitter = this.v.removeAllListeners('click');
+ }
+
+ off() {
+ var fn = () => console.log(1);
+ var v1: EventEmitter = this.v.off('click', fn);
+ var v2: EventEmitter = this.v.off('click', fn, true);
+ }
+
+ addListener() {
+ var fn = () => console.log(1);
+ var v1: EventEmitter = this.v.addListener('click', fn);
+ var v2: EventEmitter = this.v.addListener('click', fn, this);
+ }
+
+ setMaxListeners() {
+ var v1: EventEmitter = this.v.setMaxListeners();
+ }
+}
diff --git a/eventemitter3/eventemitter3.d.ts b/eventemitter3/eventemitter3.d.ts
new file mode 100644
index 000000000..60f6e6e93
--- /dev/null
+++ b/eventemitter3/eventemitter3.d.ts
@@ -0,0 +1,100 @@
+// Type definitions for EventEmitter3 0.1.6
+// Project: https://github.com/primus/eventemitter3
+// Definitions by: Yuichi Murata
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module EventEmitter3 {
+ export class EventEmitter {
+ /**
+ * Minimal EventEmitter interface that is molded against the Node.js
+ * EventEmitter interface.
+ *
+ * @constructor
+ * @api public
+ */
+ constructor();
+
+ /**
+ * Return a list of assigned event listeners.
+ *
+ * @param {String} event The events that should be listed.
+ * @returns {Array}
+ * @api public
+ */
+ listeners(event: string): Function[];
+
+ /**
+ * Emit an event to all registered event listeners.
+ *
+ * @param {String} event The name of the event.
+ * @returns {Boolean} Indication if we've emitted an event.
+ * @api public
+ */
+ emit(event: string, ...args: any[]): boolean;
+
+ /**
+ * Register a new EventListener for the given event.
+ *
+ * @param {String} event Name of the event.
+ * @param {Functon} fn Callback function.
+ * @param {Mixed} context The context of the function.
+ * @api public
+ */
+ on(event: string, fn: Function, context?: any): EventEmitter;
+
+ /**
+ * Add an EventListener that's only called once.
+ *
+ * @param {String} event Name of the event.
+ * @param {Function} fn Callback function.
+ * @param {Mixed} context The context of the function.
+ * @api public
+ */
+ once(event: string, fn: Function, context?: any): EventEmitter;
+
+ /**
+ * Remove event listeners.
+ *
+ * @param {String} event The event we want to remove.
+ * @param {Function} fn The listener that we need to find.
+ * @param {Boolean} once Only remove once listeners.
+ * @api public
+ */
+ removeListener(event: string, fn: Function, once?: boolean): EventEmitter;
+
+ /**
+ * Remove all listeners or only the listeners for the specified event.
+ *
+ * @param {String} event The event want to remove all listeners for.
+ * @api public
+ */
+ removeAllListeners(event: string): EventEmitter;
+
+ //
+ // Alias methods names because people roll like that.
+ //
+ off(event: string, fn: Function, once?: boolean): EventEmitter;
+ addListener(event: string, fn: Function, context?: any): EventEmitter;
+
+ //
+ // This function doesn't apply anymore.
+ //
+ setMaxListeners(): EventEmitter;
+ }
+ export module EventEmitter {
+ //
+ // Expose the module.
+ //
+ export class EventEmitter extends EventEmitter3.EventEmitter {}
+ export class EventEmitter2 extends EventEmitter3.EventEmitter {}
+ export class EventEmitter3 extends EventEmitter3.EventEmitter {}
+ }
+}
+
+declare module 'eventemitter3' {
+ //
+ // Expose the module.
+ //
+ class EventEmitter extends EventEmitter3.EventEmitter {}
+ export = EventEmitter;
+}