Come usare jQuery con TypeScript


158

sto provando

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

La sua che mostra questo errore in Visual Studio: (TS) Cannot find name '$'.. Come posso usare jQuery con TypeScript?


3
Puoi semplicemente includere questa rigaimport * as $ from "jquery";
jcubic,

Risposte:


210

Molto probabilmente è necessario scaricare e includere il file di dichiarazione TypeScript per jQuery jquery.d.ts— nel progetto.

Opzione 1: installa il pacchetto @types (consigliato per TS 2.0+)

Nella stessa cartella del file package.json , eseguire il comando seguente:

npm install --save-dev @types/jquery

Quindi il compilatore risolverà automaticamente le definizioni per jquery.

Opzione 2: download manuale (non consigliato)

Scaricalo qui .

Opzione 3: utilizzo delle digitazioni (Pre TS 2.0)

Se stai utilizzando le digitazioni , puoi includerlo in questo modo:

// 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

Dopo aver impostato il file di definizione, importare l'alias ( $) nel file TypeScript desiderato per usarlo normalmente.

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

Potrebbe essere necessario compilare con --allowSyntheticDefaultImports-add "allowSyntheticDefaultImports": truein tsconfig.json .

Installa anche il pacchetto?

Se non hai installato jquery, probabilmente vorrai installarlo come dipendenza tramite npm (ma non è sempre così):

npm install --save jquery

6
Ho dovuto riavviare Visual Studio per farlo funzionare, piccolo passo ma mi ha fatto inciampare per un po '.
William Howley,

1
@daslicht controlla questa domanda
David Sherret,

6
per aiutare gli altri: Quindi devi solo installare jquery: npm install jquery e usalo con import $ = require ('jquery');
Jonathan,

28
Potrebbe anche usareimport * as $ from 'jquery'
gldraphael il

1
Ricevo un erroreError TS1192 Module '"jquery"' has no default export.
Karthik,

29

Nel mio caso ho dovuto farlo

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

Quindi nel file di script A.ts

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

26

PER il codice di Visual Studio

Ciò che funziona per me è assicurarmi di eseguire il caricamento della libreria JQuery standard tramite uno <script> tag in index.html.

Correre

npm install --save @types/jquery

Ora le funzioni JQuery $ sono disponibili in tutti i file .ts, senza bisogno di altre importazioni.


2
È necessario dichiarare jquery / $ nel componente, se TsLint è attivo per questi tipi di controlli del tipo. Per es. javascript declare var jquery: any; declare var $: any;
phoenisx,

1
@Subroto, il tuo suggerimento funziona correttamente. Mettilo come una risposta. Grazie.
yW0K5o

21

Credo che potresti aver bisogno delle tipizzazioni Typescript per JQuery. Dal momento che hai detto che stai usando Visual Studio, potresti usare Nuget per ottenerli.

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

Il comando nella console di Nuget Package Manager è

Install-Package jquery.TypeScript.DefinitelyTyped

Aggiornamento: come indicato nel commento, questo pacchetto non è stato aggiornato dal 2016. Ma puoi ancora visitare la loro pagina Github su https://github.com/DefinitelyTyped/DefinitelyTyped e scaricare i tipi. Passare alla cartella per la libreria e quindi scaricare il index.d.tsfile lì. Inseriscilo ovunque nella directory del progetto e VS dovrebbe usarlo immediatamente.


2
Il pacchetto nuget per DefinitelyTypes non è più gestito. Otterrai una versione precedente se lo fai.
Dave de Jong,

17

Per Angular CLI V7

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

Assicurati che jquery abbia una voce in angular.json -> script

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

Vai a tsconfig.app.json e aggiungi una voce in "tipi"

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

La proprietà 'modale' non esiste sul tipo 'JQuery <HTMLElement>'. ottenere questo errore dopo aver aggiunto
user2900572

12

AGGIORNAMENTO 2019:

Risposta di David , è più preciso.

Typescript supporta librerie di fornitori di terze parti, che non utilizzano Typescript per lo sviluppo di librerie, utilizzando DefinitelyTyped Repo .


È necessario dichiarare jquery/ $nel componente, se tsLint è attivo per questi tipi di controlli del tipo.

Per es.

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

"se hanno installato la loro digitazione" Non capisco. Intendi NON installato? Perché dichiararli come altrimenti? Voglio solo compilare senza errori e non installare alcun materiale aggiuntivo e sto lavorando con librerie che non hanno tipi da installare.
redanimalwar,

@redanimalwar Penso di averlo scritto, perché in progetti Web come reazioni / angolari, se il webpack è configurato manualmente, le librerie di terze parti sono definite a livello globale, ed è difficile dire al webpack da dove vengono importate queste librerie, quindi declareviene usata la parola chiave. Tuttavia, possiamo ancora dire a vscode delle digitazioni se sono presenti node_modules, ecco perché l'installazione di digitazioni aiuta in intellisense, ma per un progetto webpack vanilla, senza la declaretrasmissione del progetto di parole chiave fallisce. Ho rimosso la mia dichiarazione dalla risposta, per non confondere le persone.
phoenisx,

Ad ogni modo, non ho armeggiato con Angular / Typescript da molto tempo ormai, ma sento che, se fossero installate delle digitazioni, avremmo potuto fare qualcosa del genere - import JQuery from 'jquery'; declare var $: JQuery;. Non sono sicuro, se funzionerà.
phoenisx,

Ho usato - typescriptlang.org/docs/handbook/… , in tsconfig, per eliminare i problemi di tipo di terze parti.
phoenisx,

3

Se si desidera utilizzare jquery in un'applicazione Web (ad esempio React) e jquery è già caricato <script src="jquery-3.3.1.js"...

Sulla pagina web puoi fare:

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

quindi, non è necessario caricare jquery una seconda volta (con npm install --save jquery) ma avere tutti i vantaggi di Typescript


2

Ecco i miei passi di configurazione di TypeScript e jQuery.

Rende i tipi di jQuery supportati per funzionare meglio della maggior parte degli articoli su Internet . ( Credo. )

primo:

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




secondo (molto, molto importante!!!):

import jquery = require("jquery");



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




allora, puoi godertelo:

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




È liscio come la seta !!!


quindi, devi scriverlo in ogni file ts dei componenti?
Humble Dolt,

@HumbleDolt Se si collega jQuery su 【finestra】, è sufficiente aggiungerlo declare global { interface Window { $ :JQueryStatic; } }in yourTypeDeclaration.d.ts. E in modo appropriato, è necessario verificare se $ è montato in 【finestra】. Ad esempio import $ = require('jquery'); window.$ = $ ;, oppure jQuery 【$】 è stato montato da un tag di script esterno.
Lancer.Yan

vuoi dire, può includere uno script in index.html e scriverlo lì? typeDeclaration.ts in 8 angolare? c'è tsconfig.json
Humble Dolt

@HumbleDolt Quindi, puoi provare la seconda soluzione import $ = require('jquery') ; window.$ = $;. (Faresti meglio a iniziarlo, nel punto di partenza del tuo progetto. E preferisco creare un sdkdir, per gestire tutti i requisiti e l'inizializzazione della libreria esterna in un file o luogo).
Lancer.

@HumbleDolt 【yourTypeDeclaretion.d.ts】 è solo un file definito dal tipo. È un file speciale per definire i tuoi tipi di sé. In TypeScript, 【.d.ts】 è solo un modo di isolamento esplicito, per distinguere il riconoscimento del tipo e il codice vero. Puoi anche scrivere il tipo-dichiarazione-snipet in un file 【.ts】, funzionerà comunque. (forse con qualche avviso di correzione grammaticale)
Lancer.Yan

1

Questo lavoro per me ora e oggi in Angular versione 9

  1. Installa via npm questo: npm i @ types / jquery basta aggiungere --save per l'installazione a livello globale.
  2. Vai a tsconfig.app.json e aggiungi l'array "tipi" jquery.
  3. servire e fatto.

0

Questo funziona per me:

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

1
Funzionerebbe, ma non funzionerebbe come fortemente tipizzato, il che perde i vantaggi dell'usarlo con TypeScript, se vuoi per le librerie esterne. Ancora un approccio piuttosto interessante.
nacque il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.