diff --git a/mousetrap/mousetrap-global-bind-tests.ts b/mousetrap/mousetrap-global-bind-tests.ts
new file mode 100644
index 000000000..92374d862
--- /dev/null
+++ b/mousetrap/mousetrap-global-bind-tests.ts
@@ -0,0 +1,42 @@
+///
+
+Mousetrap.globalBind('4', function() { console.log('4'); });
+Mousetrap.globalBind("?", function() { console.log('show shortcuts!'); });
+Mousetrap.globalBind('esc', function() { console.log('escape'); }, 'keyup');
+
+// combinations
+Mousetrap.globalBind('command+shift+K', function() { console.log('command shift k'); });
+
+// map multiple combinations to the same callback
+Mousetrap.globalBind(['command+k', 'ctrl+k'], function() {
+ console.log('command k or control k');
+
+ // return false to prevent default browser behavior
+ // and stop event from bubbling
+ return false;
+});
+
+// gmail style sequences
+Mousetrap.globalBind('g i', function() { console.log('go to inbox'); });
+Mousetrap.globalBind('* a', function() { console.log('select all'); });
+
+// konami code!
+Mousetrap.globalBind('up up down down left right left right b a enter', function() {
+ console.log('konami code');
+});
+
+Mousetrap.globalBind(['ctrl+s', 'meta+s'], (e, combo) => {
+ if (e.preventDefault) {
+ e.preventDefault();
+ } else {
+ // internet explorer
+ e.returnValue = false;
+ }
+});
+
+Mousetrap.unbind('?');
+
+Mousetrap.trigger('esc');
+Mousetrap.trigger('esc', 'keyup');
+
+Mousetrap.reset();
diff --git a/mousetrap/mousetrap-global-bind.d.ts b/mousetrap/mousetrap-global-bind.d.ts
new file mode 100644
index 000000000..ecfdd2ff2
--- /dev/null
+++ b/mousetrap/mousetrap-global-bind.d.ts
@@ -0,0 +1,11 @@
+// Type definitions for Mousetrap 1.4.6's global-bind extension
+// Project: http://craig.is/killing/mice#extensions.global
+// Definitions by: Andrew Bradley
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+interface MousetrapStatic {
+ globalBind(keys: string, callback: (e: ExtendedKeyboardEvent, combo: string) => any, action?: string): void;
+ globalBind(keyArray: string[], callback: (e: ExtendedKeyboardEvent, combo: string) => any, action?: string): void;
+}
diff --git a/mousetrap/mousetrap-tests.ts b/mousetrap/mousetrap-tests.ts
index 3eac1eef1..d60d8278d 100644
--- a/mousetrap/mousetrap-tests.ts
+++ b/mousetrap/mousetrap-tests.ts
@@ -41,3 +41,11 @@ Mousetrap.trigger('esc');
Mousetrap.trigger('esc', 'keyup');
Mousetrap.reset();
+
+// Test that Mousetrap can be loaded as an external module.
+// Assume that if the externally-loaded module can be assigned to a variable with the type of global Mousetrap,
+// then everything is working correctly.
+
+import importedMousetrap = require('mousetrap');
+var mousetrapModuleReference: typeof Mousetrap = importedMousetrap;
+
diff --git a/mousetrap/mousetrap.d.ts b/mousetrap/mousetrap.d.ts
index dee352b42..846e1f3ce 100644
--- a/mousetrap/mousetrap.d.ts
+++ b/mousetrap/mousetrap.d.ts
@@ -19,3 +19,7 @@ interface MousetrapStatic {
}
declare var Mousetrap: MousetrapStatic;
+
+declare module "mousetrap" {
+ export = Mousetrap;
+}