diff --git a/serve-index/serve-index-tests.ts b/serve-index/serve-index-tests.ts
new file mode 100644
index 000000000..5c4910af9
--- /dev/null
+++ b/serve-index/serve-index-tests.ts
@@ -0,0 +1,72 @@
+///
+///
+
+import * as express from 'express';
+import * as serveIndex from 'serve-index';
+import * as fs from 'fs';
+
+const app = express();
+
+// Serve URLs like /ftp/thing as public/ftp/thing
+app.use('/ftp', serveIndex('public/ftp', {'icons': true}));
+app.listen(8080);
+
+
+// Taken from https://github.com/expressjs/serve-index/blob/v1.7.2/test/test.js
+
+import * as path from 'path';
+var fixtures = path.join(__dirname, '/fixtures');
+const createServer = serveIndex;
+
+var server = createServer('test/fixtures', {'hidden': false});
+
+var server = createServer('test/fixtures', {'hidden': true});
+
+var server = createServer(fixtures, {'filter': filter});
+function filter(name: string): boolean {
+ if (name.indexOf('foo') === -1) return true
+ return false
+}
+
+var server = createServer(fixtures, {'filter': filter, 'hidden': false});
+
+var server = createServer(fixtures, {'icons': true});
+
+var server = createServer(fixtures, {'template': __dirname + '/shared/template.html'});
+
+var server = createServer(fixtures, {'template': function (locals, callback) {
+ callback(null, 'This is a template.');
+}});
+
+var server = createServer(fixtures, {'template': function (locals, callback) {
+ callback(new Error('boom!'));
+}});
+
+var server = createServer(fixtures, {'template': function (locals, callback) {
+ callback(null, JSON.stringify(locals.directory));
+}});
+
+var server = createServer(fixtures, {'template': function (locals, callback) {
+ callback(null, JSON.stringify(locals.displayIcons));
+}});
+
+var server = createServer(fixtures, {'template': function (locals, callback) {
+ callback(null, JSON.stringify(locals.fileList.map(function (file) {
+ //file.stat = file.stat instanceof fs.Stats;
+ return file;
+ })));
+}});
+
+var server = createServer(fixtures, {'template': function (locals, callback) {
+ callback(null, JSON.stringify(locals.path));
+}});
+
+var server = createServer(fixtures, {'template': function (locals, callback) {
+ callback(null, JSON.stringify(locals.style));
+}});
+
+var server = createServer(fixtures, {'template': function (locals, callback) {
+ callback(null, JSON.stringify(locals.viewName));
+}});
+
+var server = createServer(fixtures, {'stylesheet': __dirname + '/shared/styles.css'});
diff --git a/serve-index/serve-index.d.ts b/serve-index/serve-index.d.ts
new file mode 100644
index 000000000..34ba2fbbb
--- /dev/null
+++ b/serve-index/serve-index.d.ts
@@ -0,0 +1,42 @@
+// Type definitions for serve-index v1.7.2
+// Project: https://github.com/expressjs/serve-index
+// Definitions by: Tanguy Krotoff
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module 'serve-index' {
+ import * as express from 'express';
+ import * as fs from 'fs';
+
+ namespace serveIndex {
+ interface File {
+ name: string;
+ stat: fs.Stats;
+ }
+
+ interface Locals {
+ directory: string;
+ displayIcons: boolean;
+ fileList: Array;
+ name: string;
+ stat: fs.Stats;
+ path: string;
+ style: string;
+ viewName: string;
+ }
+
+ type templateCallback = (error: Error, htmlString?: string) => void;
+
+ interface Options {
+ filter?: (filename: string, index: number, files: Array, dir: string) => boolean;
+ hidden?: boolean;
+ icons?: boolean;
+ stylesheet?: string;
+ template?: string | ((locals: Locals, callback: templateCallback) => void);
+ view?: string;
+ }
+ }
+
+ function serveIndex(path: string, options?: serveIndex.Options): express.Handler;
+
+ export = serveIndex;
+}