diff --git a/angular-websocket/angular-websocket-tests.ts b/angular-websocket/angular-websocket-tests.ts
new file mode 100644
index 0000000000..78ba982aa5
--- /dev/null
+++ b/angular-websocket/angular-websocket-tests.ts
@@ -0,0 +1,25 @@
+///
+
+let dummySocket: ng.websocket.IWebSocket;
+
+let provider: ng.websocket.IWebSocketProvider = (url: string) => {
+ return dummySocket;
+}
+
+let socket = provider("wss://localhost");
+
+socket.onOpen((event) => {})
+ .onClose((event) => {})
+ .onError((event) => {})
+ .onMessage((event) => {});
+
+socket.onMessage((event) => {}, { filter: /Some Filter/ })
+ .onMessage((event) => {}, { filter: 'Some Filter' })
+ .onMessage((event) => {}, { filter: 'Some Filter', autoApply: true })
+ .onMessage((event) => {}, { autoApply: false });
+
+socket.close(true);
+socket.close();
+
+socket.send("Some great data here!").finally(() => {});
+socket.send({ list: [1, 2, 3, 4] });
diff --git a/angular-websocket/angular-websocket.d.ts b/angular-websocket/angular-websocket.d.ts
new file mode 100644
index 0000000000..04859a7d16
--- /dev/null
+++ b/angular-websocket/angular-websocket.d.ts
@@ -0,0 +1,86 @@
+// Type definitions for angular-websocket v2.0
+// Project: https://github.com/AngularClass/angular-websocket
+// Definitions by: Nick Veys
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+declare namespace angular.websocket {
+
+ interface IWebSocketProvider {
+ /**
+ * Creates and opens an IWebSocket instance.
+ *
+ * @param url url to connect to
+ * @return websocket instance
+ */
+ (url: string): IWebSocket;
+ }
+
+ /** Options available to be specified for IWebSocket.onMessage */
+ type IWebSocketMessageOptions = {
+
+ /**
+ * If specified, only messages that match the filter will cause the message event
+ * to be fired.
+ */
+ filter?: string | RegExp;
+
+ /** If true, each message handled will safely call `$rootScope.$digest()`. */
+ autoApply?: boolean;
+ }
+
+ interface IWebSocket {
+
+ /**
+ * Adds a callback to be executed each time a socket connection is opened for
+ * this instance.
+ *
+ * @param event event object
+ * @returns this instance, for method chaining
+ */
+ onOpen(callback: (event: Event) => void): IWebSocket;
+
+ /**
+ * Adds a callback to be executed each time a socket connection is closed for
+ * this instance.
+ *
+ * @param event event object
+ * @returns this instance, for method chaining
+ */
+ onClose(callback: (event: CloseEvent) => void): IWebSocket;
+
+ /**
+ * Adds a callback to be executed each time a socket connection is closed for
+ * this instance.
+ *
+ * @param event event object
+ * @returns this instance, for method chaining
+ */
+ onError(callback: (event: Event) => void): IWebSocket;
+
+ /**
+ * Adds a callback to be executed each time a socket connection has an error for
+ * this instance.
+ *
+ * @param event event object
+ * @returns this instance, for method chaining
+ */
+ onMessage(callback: (event: MessageEvent) => void, options?: IWebSocketMessageOptions): IWebSocket;
+
+ /**
+ * Closes the underlying socket, as long as no data is still being sent from the client.
+ *
+ * @param force if `true`, force close even if data is still being sent
+ * @returns this instance, for method chaining
+ */
+ close(force?: boolean): IWebSocket;
+
+ /**
+ * Adds data to a queue, and attempts to send if the socket is ready.
+ *
+ * @param data data to send, if this is an object, it will be stringified before sending
+ */
+ send(data: string | {}): ng.IPromise;
+ }
+}