Comment utiliser jQuery avec TypeScript


158

j'essaie

$(function(){ 
    alert('Hello'); 
});

Son montrant cette erreur dans Visual Studio: (TS) Cannot find name '$'.. Comment puis-je utiliser jQuery avec TypeScript?


3
Vous pouvez simplement inclure cette ligneimport * as $ from "jquery";
jcubic

Réponses:


210

Vous devrez probablement télécharger et inclure le fichier de déclaration TypeScript pour jQuery jquery.d.ts- dans votre projet.

Option 1: installer le package @types (recommandé pour TS 2.0+)

Dans le même dossier que votre fichier package.json , exécutez la commande suivante:

npm install --save-dev @types/jquery

Ensuite, le compilateur résoudra automatiquement les définitions de jquery.

Option 2: télécharger manuellement (non recommandé)

Téléchargez-le ici .

Option 3: Utilisation des typages (pré TS 2.0)

Si vous utilisez des typages, vous pouvez l'inclure de cette façon:

// 1. Install typings
npm install typings -g
// 2. Download jquery.d.ts (run this command in the root dir of your project)
typings install dt~jquery --global --save

Après avoir configuré le fichier de définition, importez l'alias ( $) dans le fichier TypeScript souhaité pour l'utiliser comme vous le feriez normalement.

import $ from "jquery";
// or
import $ = require("jquery");

Vous devrez peut-être compiler avec --allowSyntheticDefaultImports—add "allowSyntheticDefaultImports": truedans tsconfig.json .

Installer également le package?

Si vous n'avez pas installé jquery, vous voudrez probablement l'installer en tant que dépendance via npm (mais ce n'est pas toujours le cas):

npm install --save jquery

6
J'ai dû redémarrer Visual Studio pour que cela fonctionne, petit pas mais m'a fait trébucher un peu.
William Howley

1
@daslicht vérifier cette question
David Sherret

6
pour aider les autres: Il vous suffit ensuite d'installer jquery: npm install jquery et de l'utiliser avec import $ = require ('jquery');
Jonathan

28
Pourrait également utiliserimport * as $ from 'jquery'
gldraphael

1
Je reçois une erreurError TS1192 Module '"jquery"' has no default export.
Karthik

29

Dans mon cas, je devais faire ça

npm install @types/jquery --save-dev // install jquery type as dev dependency so TS can compile properly
npm install jquery --save // save jquery as a dependency

Puis dans le fichier script A.ts

import * as $ from "jquery";
... jquery code ...

26

POUR Visual Studio Code

Ce qui fonctionne pour moi, c'est de m'assurer de faire le chargement de la bibliothèque JQuery standard via une balise <script> dans l'index.html.

Courir

npm install --save @types/jquery

Maintenant, les fonctions JQuery $ sont disponibles dans tous les fichiers .ts, pas besoin d'autres importations.


2
Vous devez déclarer jquery / $ dans votre composant, si TsLint est activé pour ces types de vérification de type. Pour par ex. javascript declare var jquery: any; declare var $: any;
phoenisx

1
@Subroto, Votre suggestion fonctionne bien. Mettez-le comme une réponse. Merci.
yW0K5o

21

Je pense que vous aurez peut-être besoin des typages Typescript pour JQuery. Puisque vous avez dit que vous utilisez Visual Studio, vous pouvez utiliser Nuget pour les obtenir.

https://www.nuget.org/packages/jquery.TypeScript.DefinatelyTyped/

La commande de la console Nuget Package Manager est

Install-Package jquery.TypeScript.DefinitelyTyped

Mise à jour: comme indiqué dans le commentaire, ce package n'a pas été mis à jour depuis 2016. Mais vous pouvez toujours visiter leur page Github à https://github.com/DefinatelyTyped/DefinatelyTyped et télécharger les types. Naviguez dans le dossier de votre bibliothèque, puis téléchargez le index.d.tsfichier là-bas. Placez-le n'importe où dans le répertoire de votre projet et VS devrait l'utiliser tout de suite.


2
Le package nuget pour DefinitelyTypes n'est plus maintenu. Vous obtiendrez une ancienne version si vous faites cela.
Dave de Jong

17

Pour CLI angulaire V7

npm install jquery --save
npm install @types/jquery --save

Assurez-vous que jquery a une entrée dans angular.json -> scripts

...
    "scripts": [
        "node_modules/jquery/dist/jquery.min.js"
    ]
...

Accédez à tsconfig.app.json et ajoutez une entrée dans "types"

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "outDir": "../out-tsc/app",
        "types": ["jquery","bootstrap","signalr"]
    },
    "exclude": [
        "test.ts",
        "**/*.spec.ts"
    ]
}

La propriété 'modal' n'existe pas sur le type 'JQuery <HTMLElement>'. obtenir cette erreur après l'ajout
user2900572

12

MISE À JOUR 2019:

La réponse de David est plus précise.

Typescript prend en charge les bibliothèques de fournisseurs tiers, qui n'utilisent pas Typescript pour le développement de bibliothèques, à l'aide du Repo DefinitelyTyped .


Vous devez déclarer jquery/ $dans votre composant, si tsLint est activé pour ces types de vérifications de type.

Pour par ex.

declare var jquery: any;
declare var $: any;

"s'ils ont leur dactylographie installé" je ne l'obtiens pas. Vous voulez dire NON installé? Pourquoi les déclarer autrement? Je veux juste compiler sans erreurs et ne pas installer de trucs supplémentaires et je travaille avec des bibliothèques qui n'ont aucun type à installer.
redanimalwar

@redanimalwar Je pense avoir écrit cela, parce que dans les projets Web comme reactjs / angular, si webpack est configuré manuellement, les bibliothèques tierces sont définies globalement, et il est difficile de dire à Webpack d'où ces bibliothèques sont importées, donc le declaremot-clé est utilisé. Mais, nous pouvons toujours dire à vscode sur les typages s'ils sont présents dans node_modules, c'est pourquoi l'installation des typages aide dans intellisense, mais pour un projet Webpack vanilla, sans la declaretranspilation de projet de mot-clé échoue. J'ai supprimé ma déclaration de la réponse, pour ne pas confondre les gens.
phoenisx

Quoi qu'il en soit, je n'ai pas manipulé Angular / Typescript depuis longtemps maintenant, mais je pense que si les typages sont installés, nous aurions pu faire quelque chose comme ça - import JQuery from 'jquery'; declare var $: JQuery;. Je ne sais pas si cela fonctionnera.
phoenisx

J'utilise - typescriptlang.org/docs/handbook/… , dans tsconfig, pour supprimer les problèmes de type tiers.
phoenisx

3

Si vous souhaitez utiliser jquery dans une application Web (par exemple React) et que jquery est déjà chargé avec <script src="jquery-3.3.1.js"...

Sur la page Web, vous pouvez faire:

npm install --save-dev @types/query
and the use it with:
let $: JQueryStatic = (window as any)["jQuery"];

donc, vous n'avez pas besoin de charger jquery une seconde fois (avec npm install --save jquery) mais bénéficiez de tous les avantages de Typescript


2

Voici mes étapes de configuration TypeScript & jQuery.

Cela permet aux types de jQuery de fonctionner mieux que la plupart des articles sur Internet . ( Je crois. )

première:

npm install jquery --save
npm install @types/jquery --save-dev




deuxième (très très très important!!!):

import jquery = require("jquery");



// this helps TypeScript to understand jQuery best !!!  otherwise It will confused .
const $: JQueryStatic = jquery;




alors, vous pouvez en profiter:

$(document).ready(function () {
    $('btn').click(function () {
       alert('I am clicked !')
    }
}




C'est soyeux !!!


alors, devez l'écrire dans chaque fichier ts de composant?
Humble Dolt

@HumbleDolt Si vous liez jQuery sur 【window】, il vous suffit d'ajouter declare global { interface Window { $ :JQueryStatic; } }yourTypeDeclaration.d.ts. Et pour bien réfléchir, vous devez vérifier si $ est monté dans 【window】. Tels que import $ = require('jquery'); window.$ = $ ;, ou votre jQuery 【$】 a été monté par une balise de script externe.
Lancer.Yan

vous voulez dire, peut inclure un script dans index.html et l'écrire là-bas? typeDeclaration.ts en angulaire 8? il y a tsconfig.json
Humble Dolt

@HumbleDolt Donc, vous pouvez essayer la deuxième solution import $ = require('jquery') ; window.$ = $;. (Vous feriez mieux de lancer celui-ci, au point de départ de votre projet. Et je préfère créer un sdkrépertoire, pour gérer toutes les exigences et les initiales de la bibliothèque externe dans un fichier ou un endroit).
Lancer.Yan

@HumbleDolt 【yourTypeDeclaretion.d.ts】 est juste un fichier défini par type. C'est un fichier spécial pour définir vos types de soi. Dans TypeScript, 【.d.ts】 est juste un moyen d'isolation explicite, pour distinguer la reconnaissance de type et le vrai code. Vous pouvez également écrire le type-declaration-snipet dans un fichier 【.ts】, cela fonctionnera toujours. (peut-être avec un avis de correction de grammaire)
Lancer.Yan

1

Ce travail pour moi maintenant et aujourd'hui à Angular version 9

  1. Installez via npm ceci: npm i @ types / jquery ajoutez simplement --save à la configuration globale.
  2. Accédez à tsconfig.app.json et ajoutez dans le tableau "types" jquery.
  3. ng servir et fait.

0

Cela fonctionne pour moi:

export var jQuery: any = window["jQuery"];

1
Cela fonctionnerait mais ne fonctionnerait pas aussi fortement typé, ce qui perd les avantages de son utilisation avec TypeScript un contournement si vous le souhaitez pour les bibliothèques externes. Encore une approche assez intéressante.
bnns
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.