diff --git a/typings/globals/jasmine-jquery/index.d.ts b/typings/globals/jasmine-jquery/index.d.ts
new file mode 100644
index 0000000..d7ebf4f
--- /dev/null
+++ b/typings/globals/jasmine-jquery/index.d.ts
@@ -0,0 +1,382 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/cd4debea25a280da0808d4ff2ca5a4bdb34bd28b/jasmine-jquery/index.d.ts
+declare function sandbox(attributes?: any): string;
+
+declare function readFixtures(...uls: string[]): string;
+declare function preloadFixtures(...uls: string[]) : void;
+declare function loadFixtures(...uls: string[]): void;
+declare function appendLoadFixtures(...uls: string[]): void;
+declare function setFixtures(html: string): string;
+declare function appendSetFixtures(html: string) : void;
+
+declare function preloadStyleFixtures(...uls: string[]) : void;
+declare function loadStyleFixtures(...uls: string[]) : void;
+declare function appendLoadStyleFixtures(...uls: string[]) : void;
+declare function setStyleFixtures(html: string) : void;
+declare function appendSetStyleFixtures(html: string) : void;
+
+declare function loadJSONFixtures(...uls: string[]): jasmine.JSONFixtures;
+declare function getJSONFixture(url: string): any;
+
+declare function spyOnEvent(selector: string, eventName: string): jasmine.JQueryEventSpy;
+
+declare namespace jasmine {
+    function spiedEventsKey(selector: JQuery, eventName: string): string;
+
+    function getFixtures(): Fixtures;
+    function getStyleFixtures(): StyleFixtures;
+    function getJSONFixtures(): JSONFixtures;
+
+    interface Fixtures {
+        fixturesPath: string;
+        containerId: string;
+        set(html: string): string;
+        appendSet(html: string): void;
+        preload(...uls: string[]): void;
+        load(...uls: string[]): void;
+        appendLoad(...uls: string[]): void;
+        read(...uls: string[]): string;
+        clearCache(): void;
+        cleanUp(): void;
+        sandbox(attributes?: any): string;
+        createContainer_(html: string) : string;
+        addToContainer_(html: string): void;
+        getFixtureHtml_(url: string): string;
+        loadFixtureIntoCache_(relativeUrl: string): void;
+        makeFixtureUrl_(relativeUrl: string): string;
+        proxyCallTo_(methodName: string, passedArguments: any): any;
+    }
+
+    interface StyleFixtures {
+        fixturesPath: string;
+        set(html: string): string;
+        appendSet(html: string): void;
+        preload(...uls: string[]) : void;
+        load(...uls: string[]) : void;
+        appendLoad(...uls: string[]) : void;
+        read_(...uls: string[]): string;
+        clearCache() : void;
+        cleanUp() : void;
+        createStyle_(html: string) : void;
+        getFixtureHtml_(url: string): string;
+        loadFixtureIntoCache_(relativeUrl: string) : void;
+        makeFixtureUrl_(relativeUrl: string): string;
+        proxyCallTo_(methodName: string, passedArguments: any): any;
+    }
+
+    interface JSONFixtures {
+        fixturesPath: string;
+        load(...uls: string[]): void;
+        read(...uls: string[]): string;
+        clearCache(): void;
+        getFixtureData_(url: string): any;
+        loadFixtureIntoCache_(relativeUrl: string): void;
+        proxyCallTo_(methodName: string, passedArguments: any): any;
+    }
+
+    interface Matchers {
+        /**
+         * Check if DOM element has class.
+         *
+         * @param className Name of the class to check.
+         *
+         * @example
+         * // returns true
+         * expect($('<div class="some-class"></div>')).toHaveClass("some-class")
+         */
+        toHaveClass(className: string): boolean;
+
+        /**
+         * Check if DOM element has the given CSS properties.
+         *
+         * @param css Object containing the properties (and values) to check.
+         *
+         * @example
+         * // returns true
+         * expect($('<div style="display: none; margin: 10px;"></div>')).toHaveCss({display: "none", margin: "10px"})
+         *
+         * @example
+         * // returns true
+         * expect($('<div style="display: none; margin: 10px;"></div>')).toHaveCss({margin: "10px"})
+         */
+        toHaveCss(css: any): boolean;
+
+        /**
+         * Checks if DOM element is visible.
+         * Elements are considered visible if they consume space in the document. Visible elements have a width or height that is greater than zero.
+         */
+        toBeVisible(): boolean;
+        /**
+         * Check if DOM element is hidden.
+         * Elements can be hidden for several reasons:
+         * - They have a CSS display value of none ;
+         * - They are form elements with type equal to hidden.
+         * - Their width and height are explicitly set to 0.
+         * - An ancestor element is hidden, so the element is not shown on the page.
+         */
+        toBeHidden(): boolean;
+
+        /**
+         * Only for tags that have checked attribute
+         *
+         * @example
+         * // returns true
+         * expect($('<option selected="selected"></option>')).toBeSelected()
+         */
+        toBeSelected(): boolean;
+
+        /**
+         * Only for tags that have checked attribute
+         * @example
+         * // returns true
+         * expect($('<input type="checkbox" checked="checked"/>')).toBeChecked()
+         */
+        toBeChecked(): boolean;
+
+        /**
+         * Checks for child DOM elements or text
+         */
+        toBeEmpty(): boolean;
+
+        /**
+         * Checks if element exists in or out the DOM.
+         */
+        toExist(): boolean;
+
+        /**
+         * Checks if array has the given length.
+         *
+         * @param length Expected length
+         */
+        toHaveLength(length: number): boolean;
+
+        /**
+         * Check if DOM element contains an attribute and, optionally, if the value of the attribute is equal to the expected one.
+         *
+         * @param attributeName Name of the attribute to check
+         * @param expectedAttributeValue Expected attribute value
+         */
+        toHaveAttr(attributeName: string, expectedAttributeValue? : any): boolean;
+
+        /**
+         * Check if DOM element contains a property and, optionally, if the value of the property is equal to the expected one.
+         *
+         * @param propertyName Property name to check
+         * @param expectedPropertyValue Expected property value
+         */
+        toHaveProp(propertyName: string, expectedPropertyValue? : any): boolean;
+
+        /**
+         * Check if DOM element has the given Id
+         *
+         * @param Id Expected identifier
+         */
+        toHaveId(id: string): boolean;
+
+        /**
+         * Check if DOM element has the specified HTML.
+         *
+         * @example
+         * // returns true
+         * expect($('<div><span></span></div>')).toHaveHtml('<span></span>')
+         */
+        toHaveHtml(html: string): boolean;
+
+        /**
+         * Check if DOM element contains the specified HTML.
+         *
+         * @example
+         * // returns true
+         * expect($('<div><ul></ul><h1>header</h1></div>')).toContainHtml('<ul></ul>')
+         */
+        toContainHtml(html: string): boolean;
+
+        /**
+         * Check if DOM element has the given Text.
+         * @param text Accepts a string or regular expression
+         *
+         * @example
+         * // returns true
+         * expect($('<div>some text</div>')).toHaveText('some text')
+         */
+        toHaveText(text: string): boolean;
+        /**
+         * Check if DOM element contains the specified text.
+         *
+         * @example
+         * // returns true
+         * expect($('<div><ul></ul><h1>header</h1></div>')).toContainText('header')
+         */
+        toContainText(text: string): boolean;
+
+        /**
+         * Check if DOM element has the given value.
+         * This can only be applied for element on with jQuery val() can be called.
+         *
+         * @example
+         * // returns true
+         * expect($('<input type="text" value="some text"/>')).toHaveValue('some text')
+         */
+        toHaveValue(value : string): boolean;
+
+        /**
+         * Check if DOM element has the given data.
+         * This can only be applied for element on with jQuery data(key) can be called.
+         *
+         */
+        toHaveData(key : string, expectedValue : string): boolean;
+        toBe(selector: JQuery): boolean;
+
+        /**
+         * Check if DOM element is matched by the given selector.
+         *
+         * @example
+         * // returns true
+         * expect($('<div><span class="some-class"></span></div>')).toContain('some-class')
+         */
+        toContain(selector: JQuery): boolean;
+
+        /**
+         * Check if DOM element exists inside the given parent element.
+         *
+         * @example
+         * // returns true
+         * expect($('<div><span class="some-class"></span></div>')).toContainElement('span.some-class')
+         */
+        toContainElement(selector: string): boolean;
+
+        /**
+         * Check to see if the set of matched elements matches the given selector
+         *
+         * @example
+         * expect($('<span></span>').addClass('js-something')).toBeMatchedBy('.js-something')
+         *
+         * @returns {Boolean} true if DOM contains the element
+         */
+        toBeMatchedBy(selector: string): boolean;
+
+        /**
+         * Only for tags that have disabled attribute
+         * @example
+         * // returns true
+         * expect('<input type="submit" disabled="disabled"/>').toBeDisabled()
+         */
+        toBeDisabled(): boolean;
+
+        /**
+         * Check if DOM element is focused
+         * @example
+         * // returns true
+         * expect($('<input type="text" />').focus()).toBeFocused()
+         */
+        toBeFocused(): boolean;
+
+        /**
+         * Checks if DOM element handles event.
+         *
+         * @example
+         * // returns true
+         * expect($form).toHandle("submit")
+         */
+        toHandle(eventName: string): boolean;
+
+        /**
+         * Assigns a callback to an event of the DOM element.
+         *
+         * @param eventName Name of the event to assign the callback to.
+         * @param eventHandler Callback function to be assigned.
+         *
+         * @example
+         * expect($form).toHandleWith("submit", yourSubmitCallback)
+         */
+        toHandleWith(eventName: string, eventHandler : JQueryCallback): boolean;
+
+        /**
+         * Checks if event was triggered.
+         */
+        toHaveBeenTriggered(): boolean;
+
+        /**
+         * Checks if the event has been triggered on selector.
+         * @param selector Selector that should have triggered the event.
+         */
+        toHaveBeenTriggeredOn(selector: string): boolean;
+
+        /**
+         * Checks if the event has been triggered on selector.
+         * @param selector Selector that should have triggered the event.
+         * @param args Extra arguments to be passed to jQuery events functions.
+         */
+        toHaveBeenTriggeredOnAndWith(selector: string, ...args: any[]): boolean;
+
+        /**
+         * Checks if event propagation has been prevented.
+         */
+        toHaveBeenPrevented(): boolean;
+
+        /**
+         * Checks if event propagation has been prevented on element with selector.
+         *
+         * @param selector Selector that should have prevented the event.
+         */
+        toHaveBeenPreventedOn(selector: string): boolean;
+
+        /**
+         * Checks if event propagation has been stopped.
+         *
+         * @example
+         * // returns true
+         * var spyEvent = spyOnEvent('#some_element', 'click')
+         * $('#some_element').click(function (event){event.stopPropagation();})
+         * $('#some_element').click()
+         * expect(spyEvent).toHaveBeenStopped()
+         */
+        toHaveBeenStopped(): boolean;
+
+        /**
+         * Checks if event propagation has been stopped by an element with the given selector.
+         * @param selector Selector of the element that should have stopped the event propagation.
+         *
+         * @example
+         * // returns true
+         * $('#some_element').click(function (event){event.stopPropagation();})
+         * $('#some_element').click()
+         * expect('click').toHaveBeenStoppedOn('#some_element')
+         */
+        toHaveBeenStoppedOn(selector: string): boolean;
+
+        /**
+         * Checks to see if the matched element is attached to the DOM.
+         * @example
+         * expect($('#id-name')[0]).toBeInDOM()
+         */
+        toBeInDOM(): boolean;
+
+    }
+
+    interface JQueryEventSpy {
+        selector: string;
+        eventName: string;
+        handler(eventObject: JQueryEventObject): any;
+        reset(): any;
+    }
+
+    interface JasmineJQuery {
+        browserTagCaseIndependentHtml(html: string): string;
+        elementToString(element: JQuery): string;
+        matchersClass: any;
+        events: JasmineJQueryEvents;
+    }
+
+    interface JasmineJQueryEvents {
+        spyOn(selector: string, eventName: string): JQueryEventSpy;
+        args(selector: string, eventName: string): any;
+        wasTriggered(selector: string, eventName: string): boolean;
+        wasTriggeredWith(selector: string, eventName: string, expectedArgs: any, env: jasmine.Env): boolean;
+        wasPrevented(selector: string, eventName: string): boolean;
+        wasStopped(selector: string, eventName: string): boolean;
+        cleanUp() : void;
+    }
+
+    var JQuery: JasmineJQuery;
+}
diff --git a/typings/globals/jasmine-jquery/typings.json b/typings/globals/jasmine-jquery/typings.json
new file mode 100644
index 0000000..015279d
--- /dev/null
+++ b/typings/globals/jasmine-jquery/typings.json
@@ -0,0 +1,8 @@
+{
+  "resolution": "main",
+  "tree": {
+    "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/cd4debea25a280da0808d4ff2ca5a4bdb34bd28b/jasmine-jquery/index.d.ts",
+    "raw": "registry:dt/jasmine-jquery#1.5.8+20161128184045",
+    "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/cd4debea25a280da0808d4ff2ca5a4bdb34bd28b/jasmine-jquery/index.d.ts"
+  }
+}
