Verwendung von jQuery mit TypeScript


158

ich versuche

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

Dieser Fehler wird in Visual Studio angezeigt : (TS) Cannot find name '$'.. Wie kann ich jQuery mit TypeScript verwenden?


3
Sie können nur diese Zeile import * as $ from "jquery";
einschließen

Antworten:


209

Höchstwahrscheinlich müssen Sie die TypeScript-Deklarationsdatei für jQuery herunterladen und jquery.d.tsin Ihr Projekt aufnehmen.

Option 1: Installieren Sie das @ types-Paket (empfohlen für TS 2.0+)

Führen Sie im selben Ordner wie Ihre Datei package.json den folgenden Befehl aus:

npm install --save-dev @types/jquery

Dann löst der Compiler die Definitionen für jquery automatisch auf.

Option 2: Manuelles Herunterladen (nicht empfohlen)

Laden Sie es hier herunter .

Option 3: Verwenden von Typisierungen (Pre TS 2.0)

Wenn Sie Typisierungen verwenden , können Sie diese folgendermaßen einschließen:

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

Importieren Sie nach dem Einrichten der Definitionsdatei den Alias ​​( $) in die gewünschte TypeScript-Datei, um ihn wie gewohnt zu verwenden.

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

Möglicherweise müssen Sie mit --allowSyntheticDefaultImports--add "allowSyntheticDefaultImports": truein tsconfig.json kompilieren .

Paket auch installieren?

Wenn Sie jquery nicht installiert haben, möchten Sie es wahrscheinlich als Abhängigkeit über npm installieren (dies ist jedoch nicht immer der Fall):

npm install --save jquery

6
Musste Visual Studio neu starten, damit es funktioniert, kleiner Schritt, aber stolperte mich ein wenig.
William Howley

1
@daslicht überprüfen Sie diese Frage
David Sherret

6
um anderen zu helfen: Dann müssen Sie nur noch jquery installieren: npm install jquery und verwenden Sie es mit import $ = require ('jquery');
Jonathan

28
Könnte auch verwendenimport * as $ from 'jquery'
gldraphael

1
Ich Error TS1192 Module '"jquery"' has no default export.
Karthik

29

In meinem Fall musste ich das tun

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

Dann in der Skriptdatei A.ts

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

26

FÜR Visual Studio-Code

Was für mich funktioniert, ist sicherzustellen, dass ich die Standard-JQuery-Bibliothek über ein <Skript> lade -Tag in der index.html lade.

Lauf

npm install --save @types/jquery

Jetzt sind die JQuery $ -Funktionen in allen .ts-Dateien verfügbar, ohne dass weitere Importe erforderlich sind.


2
Sie müssen jquery / $ in Ihrer Komponente deklarieren, wenn TsLint für diese Arten von Typprüfungen aktiviert ist. Zum Beispiel. javascript declare var jquery: any; declare var $: any;
Phoenix

1
@Subroto, Ihr Vorschlag funktioniert OK. Setzen Sie es als Antwort. Vielen Dank.
yW0K5o

21

Ich glaube, Sie benötigen möglicherweise die Typescript-Typisierung für JQuery. Da Sie sagten, dass Sie Visual Studio verwenden, können Sie Nuget verwenden, um sie abzurufen.

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

Der Befehl in der Nuget Package Manager-Konsole lautet

Install-Package jquery.TypeScript.DefinitelyTyped

Update: Wie im Kommentar erwähnt, wurde dieses Paket seit 2016 nicht mehr aktualisiert. Sie können jedoch die Github-Seite unter https://github.com/DefinitelyTyped/DefinitelyTyped besuchen und die Typen herunterladen. Navigieren Sie durch den Ordner für Ihre Bibliothek und laden Sie die index.d.tsDatei dort herunter . Pop es irgendwo in Ihrem Projektverzeichnis und VS sollte es sofort verwenden.


2
Das Nuget-Paket für DefinitelyTypes wird nicht mehr verwaltet. Sie erhalten eine alte Version, wenn Sie dies tun.
Dave de Jong

17

Für Angular CLI V7

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

Stellen Sie sicher, dass jquery einen Eintrag in angle.json -> scripts hat

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

Gehen Sie zu tsconfig.app.json und fügen Sie einen Eintrag in "types" hinzu.

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

Die Eigenschaft 'modal' ist für den Typ 'JQuery <HTMLElement>' nicht vorhanden. Dieser Fehler wird nach dem Hinzufügen
angezeigt

12

UPDATE 2019:

Antwort von David ist genauer.

Typescript unterstützt Bibliotheken von Drittanbietern, die Typescript nicht für die Bibliotheksentwicklung verwenden, unter Verwendung von DefinitelyTyped Repo .


Sie müssen jquery/ $in Ihrer Komponente deklarieren , wenn tsLint für diese Arten von Typprüfungen aktiviert ist.

Zum Beispiel.

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

"Wenn sie ihre Eingabe installiert haben" Ich verstehe es nicht. Du meinst NICHT installiert? Warum sie als anders deklarieren? Ich möchte nur fehlerfrei kompilieren und keine zusätzlichen Inhalte installieren. Ich arbeite mit Bibliotheken, für die keine Typen installiert werden müssen.
Redanimalwar

@redanimalwar Ich glaube, ich habe das geschrieben, weil in Webprojekten wie reactjs / angle, wenn das Webpack manuell konfiguriert wird, Bibliotheken von Drittanbietern global definiert werden und es schwierig ist, dem Webpack zu sagen, woher diese Bibliotheken importiert werden, weshalb das declareSchlüsselwort verwendet wird. Trotzdem können wir vscode über Typisierungen informieren, wenn sie in vorhanden sind. node_modulesDeshalb hilft die Installation von Typisierungen in Intellisense, aber bei einem Vanilla-Webpack-Projekt ohne declareKeyword-Projekt schlägt die Transpilation fehl. Ich habe meine Aussage aus der Antwort entfernt, um die Leute nicht zu verwirren.
Phoenix

Wie auch immer, ich habe schon lange nicht mehr mit Angular / Typescript herumgespielt, aber ich denke, wenn Typisierungen installiert sind, hätten wir so etwas tun können - import JQuery from 'jquery'; declare var $: JQuery;. Ich bin mir nicht sicher, ob dies funktionieren wird.
Phoenix

Ich habe mit - typescriptlang.org/docs/handbook/... , in TSconfig, 3rd - Party - Typ Fragen zu unterdrücken.
Phoenix

3

Wenn Sie jquery in einer Webanwendung verwenden möchten (z. B. React) und jquery bereits mit geladen ist <script src="jquery-3.3.1.js"...

Auf der Webseite können Sie Folgendes tun:

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

Sie müssen jquery also nicht ein zweites Mal (mit npm install --save jquery) laden, sondern haben alle Vorteile von Typescript


2

Hier sind meine TypeScript & jQuery-Konfigurationsschritte.

Dadurch unterstützt die Unterstützung von jQuery-Typen besser als die meisten Artikel im Internet . ( Ich glaube. )

zuerst:

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




zweitens (sehr sehr sehr wichtig !!):

import jquery = require("jquery");



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




dann können Sie es genießen:

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




Es ist seidig glatt !!!


Müssen Sie es also in jede ts-Datei der Komponente schreiben?
Humble Dolt

@HumbleDolt Wenn Sie jQuery an 【Fenster】 binden, müssen Sie nur declare global { interface Window { $ :JQueryStatic; } }in yourTypeDeclaration.d.ts hinzufügen . Und um richtig zu überlegen, müssen Sie überprüfen, ob $ in 【Fenster mounted gemountet ist. Wie import $ = require('jquery'); window.$ = $ ;oder Ihre jQuery 【$】 wurde von einem externen Skript-Tag gemountet.
Lancer.Yan

Sie meinen, kann ein Skript in index.html aufnehmen und das dort schreiben? typeDeclaration.ts in Winkel 8? es gibt tsconfig.json
Humble Dolt

@ HumbleDolt Sie können also die zweite Lösung ausprobieren import $ = require('jquery') ; window.$ = $;. (Am besten initiieren Sie dieses in Ihrem Projektstartpunkt. Und ich ziehe es vor, ein sdkVerzeichnis zu erstellen , um alle Anforderungen und Initialen der äußeren Bibliothek in einer Datei oder an einem Ort zu verwalten.)
Lancer.Yan

@HumbleDolt 【yourTypeDeclaretion.d.ts】 ist nur eine typdefinierte Datei. Es ist eine spezielle Datei, um Ihre Selbsttypen zu definieren. In TypeScript ist 【.d.ts】 nur eine explizite Isolationsmethode, um Typerkennung und True-Code zu unterscheiden. Sie können das Typdeklarations-Snipet auch in eine ts .ts】 -Datei schreiben, es funktioniert weiterhin. (Vielleicht mit einem Hinweis zur Grammatikkorrektur)
Lancer.Yan

1

Diese Arbeit für mich jetzt und heute bei Angular Version 9

  1. Installieren Sie über npm this: npm i @ types / jquery fügen Sie einfach --save hinzu, um es global einzurichten.
  2. Gehen Sie zu tsconfig.app.json und fügen Sie im Array "types" jquery hinzu.
  3. ng servieren und fertig.

0

Das funktioniert bei mir:

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

1
Dies würde funktionieren, aber nicht so stark typisiert funktionieren, was die Vorteile der Verwendung mit TypeScript verliert, wenn Sie dies für externe Bibliotheken tun. Immer noch ein ziemlich interessanter Ansatz.
Bnns
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.