Files
DefinitelyTyped/types/jquery
Leonard ThieuandWesley Wigham 7c0825a58c [jquery] Drop type guards from isNumeric()/isPlainObject() and improve declarations of jQuery.data()/.data()/jQuery.css() (#29381)
* [jquery] `isNumeric` can not be a user defined type guard.

`isNumeric` can return true for strings in addition to numbers, but only for a subset of either. It'll return false for NaN (which TypeScript treats as a number) and for strings which cannot be parsed as a number.

* [jquery] `isPlainObject` can not be a user defined type guard.

Due to the imprecise way with how `PlainObject` is declared, `isPlainObject` can not be a user defined type guard.

* [jquery] Use https for links.

* [jquery] Fix link for `JQuery.jquery`.

* [jquery] Remove empty line before `@deprecated`.

For consistent formatting since examples were added.

* [jquery] Document additional `extend` parameters.

* [jquery] Improve declarations of `data()` to catch unintentionally passing `undefined` as a value.

This handles the more likely case of users passing a value that is possibly undefined.

* [jquery] Improve declaration of `css()`.

* [jquery] Minor improves to `proxy()` documentation.

* [jquery] Fix region folding for WebStorm.

WebStorm uses `// #region` to designate a region start while VS Code uses `// region`. They can both (must, in this case) be terminated using `// #endregion`. Using both `// #endregion` and `// endregion` results in odd behavior in both editors.
2018-10-02 11:37:07 -07:00
..

Usage

Global

When jQuery is globally available, you can use jQuery and $ directly.

Importing (with a global DOM available)

When you want to import jQuery as a module and have a global DOM available (e.g. browser and browser-like environments):

import jQuery = require('jquery');

Importing (without a global DOM available)

When you want to import jQuery as a module and do not have a global DOM available (e.g. Node.js environment):

import jQueryFactory = require('jquery');
const jQuery = jQueryFactory(window, true);

Note that while the factory function ignores the second parameter, it is required to get correct type declarations.

Project structure

Authoring type definitions for jQuery plugins

$.fn is represented by JQuery.

$ is represented by JQueryStatic.

Declare an interface that has the plugin's overloads as call signatures and static members as properties.

interface MyPlugin {
    settings: MyPluginSettings;
    
    (behavior: 'enable'): JQuery;
    (settings?: MyPluginSettings): JQuery;
}

interface MyPluginSettings {
    title?: string;
}

Then declare a property on JQuery with your plugin's type.

interface JQuery {
    myPlugin: MyPlugin;
}