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.