Jak używać jQuery z TypeScript


158

próbuję

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

Jego pokazując ten błąd w Visual Studio: (TS) Cannot find name '$'.. Jak mogę używać jQuery z TypeScript?


3
Możesz po prostu dodać tę linięimport * as $ from "jquery";
jcubic

Odpowiedzi:


209

Najprawdopodobniej musisz pobrać i dołączyć plik deklaracji TypeScript dla jQuery— jquery.d.ts— do swojego projektu.

Opcja 1: Zainstaluj pakiet @types (zalecany dla TS 2.0+)

W tym samym folderze, w którym znajduje się plik package.json , uruchom następujące polecenie:

npm install --save-dev @types/jquery

Następnie kompilator automatycznie rozwiąże definicje dla jquery.

Opcja 2: Pobierz ręcznie (niezalecane)

Pobierz go tutaj .

Opcja 3: używanie czcionek (przed TS 2.0)

Jeśli używasz pisania , możesz to uwzględnić w ten sposób:

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

Po skonfigurowaniu pliku definicji zaimportuj alias ( $) do żądanego pliku TypeScript, aby używać go w normalny sposób.

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

Być może trzeba kompilować z --allowSyntheticDefaultImports-add "allowSyntheticDefaultImports": truew tsconfig.json .

Zainstalować także pakiet?

Jeśli nie masz zainstalowanego jquery, prawdopodobnie chcesz zainstalować go jako zależność przez npm (ale nie zawsze tak jest):

npm install --save jquery

6
Musiałem zrestartować studio wizualne, aby działało, mały krok, ale trochę mnie potknęło.
William Howley

1
@daslicht sprawdź to pytanie
David Sherret

6
aby pomóc innym: Następnie wystarczy zainstalować jquery: npm install jquery i użyć go z import $ = require ('jquery');
Jonathan

28
Można również użyćimport * as $ from 'jquery'
gldraphael

1
Otrzymuję błądError TS1192 Module '"jquery"' has no default export.
Karthik

29

W moim przypadku musiałem to zrobić

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

Następnie w pliku skryptu A.ts

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

26

DLA Visual Studio Code

To, co działa dla mnie, to upewnienie się, że ładuję standardową bibliotekę JQuery za pomocą <script> tagu w index.html.

Biegać

npm install --save @types/jquery

Teraz funkcje JQuery $ są dostępne we wszystkich plikach .ts, nie ma potrzeby żadnego innego importu.


2
Musisz zadeklarować jquery / $ w swoim komponencie, jeśli TsLint jest włączone dla tego typu sprawdzania typów. Np. javascript declare var jquery: any; declare var $: any;
phoenisx

1
@ Subroto, Twoja sugestia działa OK. Podaj to jako odpowiedź. Dzięki.
yW0K5o

21

Uważam, że możesz potrzebować maszynopisu dla JQuery. Ponieważ powiedziałeś, że używasz programu Visual Studio, możesz użyć Nuget, aby je uzyskać.

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

Polecenie w konsoli Menedżera pakietów Nuget to

Install-Package jquery.TypeScript.DefinitelyTyped

Aktualizacja: Jak zauważono w komentarzu, ten pakiet nie był aktualizowany od 2016 r. Ale nadal możesz odwiedzić ich stronę Github pod adresem https://github.com/DefinitelyTyped/DefinitelyTyped i pobrać typy. Przejdź do folderu swojej biblioteki, a następnie pobierz index.d.tstam plik. Umieść go w dowolnym miejscu katalogu projektu, a VS powinien od razu go użyć.


2
Pakiet NuGet dla DefinitelyTypes nie jest już obsługiwany. Jeśli to zrobisz, otrzymasz starą wersję.
Dave de Jong,

17

Dla Angular CLI V7

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

Upewnij się, że jquery ma wpis w angular.json -> scripts

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

Przejdź do tsconfig.app.json i dodaj wpis w „Typach”

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

Właściwość „modalna” nie istnieje w typie „JQuery <HTMLElement>”. otrzymywanie tego błędu po dodaniu
user2900572

12

UPDATE 2019:

Odpowiedź Davida jest dokładniejsza.

Typescript obsługuje biblioteki innych dostawców, które nie używają Typescript do tworzenia bibliotek, używając DefinitelyTyped Repo .


Musisz zadeklarować jquery/ $w swoim komponencie, jeśli tsLint jest włączony dla tych typów sprawdzania typu.

Np.

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

„jeśli mają zainstalowane oprogramowanie do pisania”, nie rozumiem. Masz na myśli NIE zainstalowany? Po co deklarować je jako inne? Chcę tylko kompilować bez błędów i nie instalować żadnych dodatkowych rzeczy i pracuję z bibliotekami, które nie mają typów do zainstalowania.
redanimalwar

@redanimalwar Myślę, że napisałem to, ponieważ w projektach internetowych, takich jak Reactjs / Angular, jeśli webpack jest konfigurowany ręcznie, biblioteki zewnętrzne są definiowane globalnie i trudno jest powiedzieć webpakowi, skąd te biblioteki są importowane, dlatego declareużywane jest słowo kluczowe. Ale nadal możemy powiedzieć vscode o typach, jeśli są obecne wnode_modules , dlatego instalowanie typów pomaga w intelisense, ale w przypadku declareprojektu vanilla webpack transpilacja projektu bez słów kluczowych kończy się niepowodzeniem. Usunąłem moje stwierdzenie z odpowiedzi, aby nie mylić ludzi.
phoenisx

W każdym razie od dawna nie majstrowałem przy Angular / Typescript, ale czuję, że gdybyśmy zainstalowali czcionki, moglibyśmy zrobić coś takiego - import JQuery from 'jquery'; declare var $: JQuery;. Nie jestem pewien, czy to zadziała.
phoenisx

I zostały z wykorzystaniem - typescriptlang.org/docs/handbook/... w tsconfig, aby stłumić problemy 3rd typu impreza.
phoenisx

3

Jeśli chcesz używać jquery w aplikacji internetowej (np. React), a jquery jest już załadowany <script src="jquery-3.3.1.js"...

Na stronie internetowej możesz:

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

więc nie musisz ładować jquery po raz drugi (za pomocą npm install --save jquery), ale masz wszystkie zalety Typescript


2

Oto moje kroki konfiguracji TypeScript i jQuery.

To sprawia, że ​​obsługa typów jQuery działa lepiej niż większość artykułów w Internecie . ( Wierzę. )

pierwszy:

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




po drugie (bardzo, bardzo ważne!!!):

import jquery = require("jquery");



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




wtedy możesz się tym cieszyć:

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




Jest jedwabiście gładka !!!


więc trzeba to zapisać w każdym pliku ts składnika?
Humble Dolt

@HumbleDolt Jeśli połączysz jQuery w 【oknie】, wystarczy dodać declare global { interface Window { $ :JQueryStatic; } }yourTypeDeclaration.d.ts. I dobrze się zastanowić, musisz sprawdzić, czy $ jest zamontowany w 【oknie】. Na przykład import $ = require('jquery'); window.$ = $ ;, lub twój jQuery 【$】 został zamontowany przez zewnętrzny tag skryptu.
Lancer.Yan

masz na myśli, czy możesz dołączyć skrypt do index.html i tam to napisać? typeDeclaration.ts w kątowej 8? jest tsconfig.json
Humble Dolt

@HumbleDolt Możesz więc wypróbować drugie rozwiązanie import $ = require('jquery') ; window.$ = $;. (Najlepiej zainicjuj to w punkcie startowym projektu. Wolę utworzyć sdkkatalog, aby zarządzać wszystkimi wymaganiami i inicjałami biblioteki zewnętrznej w jednym pliku lub miejscu).
Lancer.Yan

@HumbleDolt 【yourTypeDeclaretion.d.ts】 to tylko plik zdefiniowany przez typ. Jest to specjalny plik do definiowania typów siebie. W języku TypeScript 【.d.ts】 jest po prostu jawnym sposobem izolacji, aby odróżnić rozpoznawanie typu i prawdziwy kod. Możesz również zapisać snipet-deklarację typu w pliku 【.ts】, to nadal będzie działać. (może z informacją o poprawkach gramatycznych)
Lancer.Yan

1

To działa dla mnie teraz i dziś w wersji Angular 9

  1. Zainstaluj przez npm to: npm i @ types / jquery po prostu dodaj --save, aby skonfigurować globalnie.
  2. Przejdź do tsconfig.app.json i dodaj jquery do tablicy „types”.
  3. ng służyć i gotowe.

0

To działa dla mnie:

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

1
To zadziałałoby, ale nie działałoby tak silnie wpisane, co powoduje utratę korzyści płynących z używania go z TypeScript jako obejście, jeśli będzie to potrzebne dla zewnętrznych bibliotek. Wciąż dość interesujące podejście.
bnns
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.