diff --git a/jsdeferred/jsdeferred.d.ts b/jsdeferred/jsdeferred.d.ts
index 27a4fb65af..7d7b6ce96a 100644
--- a/jsdeferred/jsdeferred.d.ts
+++ b/jsdeferred/jsdeferred.d.ts
@@ -24,8 +24,8 @@ interface RetryOption {
interface DeferredizedFunction { (...arg: any[]): Deferred; }
interface DeferredizedFunctionWithNumber { (n: number): Deferred; }
-interface FunctionWithNumber { (i: number, o?: any); }
-interface ErrorCallback { (d: Deferred, ...args: any[]); }
+interface FunctionWithNumber { (i: number, o?: any): any; }
+interface ErrorCallback { (d: Deferred, ...args: any[]): any; }
declare class Deferred {
diff --git a/node-slack/node-slack-tests.ts b/node-slack/node-slack-tests.ts
new file mode 100644
index 0000000000..e0c6e23b93
--- /dev/null
+++ b/node-slack/node-slack-tests.ts
@@ -0,0 +1,46 @@
+///
+///
+
+import express = require('express');
+import Slack = require('node-slack');
+let app = express();
+
+var hook_url: string = 'foo_hook';
+var options: Slack.Option = { proxy: '' };
+
+var slack = new Slack(hook_url, options);
+
+slack.send({
+ text: 'Howdy!',
+ channel: '#foo',
+ username: 'Bot'
+});
+
+var attachment_array: any[] = [];
+
+slack.send({
+ text: 'Howdy!',
+ channel: '#foo',
+ username: 'Bot',
+ icon_emoji: 'taco',
+ attachments: attachment_array,
+ unfurl_links: true,
+ link_names: 1
+});
+
+
+app.post('/yesman', function(req, res) {
+
+ var reply = slack.respond(req.body, function(hook: any) {
+
+ return {
+ text: 'Good point, ' + hook.user_name,
+ username: 'Bot'
+ };
+
+ });
+
+ res.json(reply);
+
+});
+
diff --git a/node-slack/node-slack.d.ts b/node-slack/node-slack.d.ts
new file mode 100644
index 0000000000..8243be565f
--- /dev/null
+++ b/node-slack/node-slack.d.ts
@@ -0,0 +1,61 @@
+// Type definitions for node-slack
+// Project: https://github.com/xoxco/node-slack
+// Definitions by: Qubo
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module "node-slack" {
+ import request = require('request');
+
+ class Slack {
+ constructor(hookUrl: string, option?: Slack.Option);
+ send(message: Slack.Message): any; //TODO: Here comes deferred's promise as a return type
+ send(message: Slack.Message, callback: Slack.SendCallback): request.Request;
+ respond(query: Slack.Query): Slack.TextResponse;
+ respond(query: Slack.Query, callback: Slack.ResponseCallback): Slack.TextResponse;
+ }
+
+ namespace Slack {
+
+ interface Option {
+ proxy: string;
+ }
+
+ interface Message {
+ text: string;
+ channel?: string;
+ username?: string;
+ icon_emoji?: string;
+ attachments?: any[];
+ unfurl_links?: boolean;
+ link_names?: number;
+ }
+
+ interface SendCallback {
+ (err: any, body: any): any;
+ }
+
+ interface Query {
+ token?: string;
+ team_id?: string;
+ channel_id?: string;
+ channel_name?: string;
+ timestamp?: number;
+ user_id?: string;
+ user_name?: string;
+ text: string;
+ }
+
+ interface TextResponse {
+ text: string;
+ }
+
+ interface ResponseCallback {
+ (err: any, query: Query): any;
+ }
+ }
+
+ export = Slack;
+}
+