Cara menggunakan jQuery dengan TypeScript


158

aku sedang mencoba

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

Its menunjukkan kesalahan ini dalam Visual Studio: (TS) Cannot find name '$'.. Bagaimana saya bisa menggunakan jQuery dengan TypeScript?


3
Anda bisa memasukkan baris iniimport * as $ from "jquery";
jcubic

Jawaban:


210

Kemungkinan besar Anda perlu mengunduh dan memasukkan file deklarasi TypeScript untuk jQuery— jquery.d.ts—di proyek Anda.

Opsi 1: Instal paket @types (Disarankan untuk TS 2.0+)

Dalam folder yang sama dengan file package.json Anda , jalankan perintah berikut:

npm install --save-dev @types/jquery

Kemudian kompiler akan menyelesaikan definisi untuk jquery secara otomatis.

Opsi 2: Unduh Secara Manual (Tidak Disarankan)

Unduh di sini .

Opsi 3: Menggunakan Typing (Pre TS 2.0)

Jika Anda menggunakan pengetikan maka Anda bisa memasukkannya dengan cara ini:

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

Setelah mengatur file definisi, impor alias ( $) di file TypeScript yang diinginkan untuk menggunakannya seperti biasa.

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

Anda mungkin perlu untuk mengkompilasi dengan --allowSyntheticDefaultImports-Tambahkan "allowSyntheticDefaultImports": truedi tsconfig.json .

Juga Instal Paket?

Jika Anda tidak menginstal jquery, Anda mungkin ingin menginstalnya sebagai dependensi melalui npm (tetapi ini tidak selalu terjadi):

npm install --save jquery

6
Harus me-reboot studio visual agar berfungsi, langkah kecil tapi membuatku tersandung sedikit.
William Howley

1
@daslicht periksa pertanyaan ini
David Sherret

6
untuk membantu orang lain: Maka Anda hanya perlu menginstal jquery: npm instal jquery dan menggunakannya dengan import $ = require ('jquery');
Jonathan

28
Bisa juga menggunakanimport * as $ from 'jquery'
gldraphael

1
Saya mendapatkan kesalahanError TS1192 Module '"jquery"' has no default export.
Karthik

29

Dalam kasus saya, saya harus melakukan ini

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

Kemudian di file skrip A.ts

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

26

UNTUK Kode Visual Studio

Apa yang berhasil bagi saya adalah memastikan saya melakukan pemuatan pustaka JQuery standar melalui <script> tag di index.html.

Lari

npm install --save @types/jquery

Sekarang fungsi JQuery $ tersedia di semua file .ts, tidak perlu impor lainnya.


2
Anda perlu mendeklarasikan jquery / $ di Komponen Anda, Jika TsLint Aktif untuk jenis Pemeriksaan Jenis ini. Untuk eg. javascript declare var jquery: any; declare var $: any;
phoenisx

1
@ Subroto, Saran Anda berfungsi OK. Masukkan itu sebagai jawaban. Terima kasih.
yW0K5o

21

Saya yakin Anda mungkin perlu mengetikkan Typefrip untuk JQuery. Karena Anda mengatakan Anda menggunakan Visual Studio, Anda bisa menggunakan Nuget untuk mendapatkannya.

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

Perintah dalam Konsol Manajer Paket Nuget adalah

Install-Package jquery.TypeScript.DefinitelyTyped

Pembaruan: Seperti yang tercantum dalam komentar, paket ini belum diperbarui sejak 2016. Tetapi Anda masih dapat mengunjungi halaman Github mereka di https://github.com/DefinitelyTyped/DefinitelyTyped dan unduh jenisnya. Arahkan folder untuk perpustakaan Anda dan kemudian unduh index.d.tsfile di sana. Pop itu di mana saja di direktori proyek Anda dan VS harus segera menggunakannya.


2
Paket nuget untuk DefinitelyTypes tidak lagi dipertahankan. Anda akan mendapatkan versi lama jika melakukan ini.
Dave de Jong

17

Untuk Angular CLI V7

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

Pastikan jquery memiliki entri dalam skrip angular.json ->

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

Buka tsconfig.app.json dan tambahkan entri di "types"

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

Properti 'modal' tidak ada pada tipe 'JQuery <HTMLElement>'. mendapatkan kesalahan ini setelah menambahkan
user2900572

12

PEMBARUAN 2019:

Jawab oleh David , lebih akurat.

Typescript mendukung pustaka vendor pihak ketiga, yang tidak menggunakan Typcript untuk pengembangan pustaka, menggunakan DefinitelyTyped Repo .


Anda perlu mendeklarasikan jquery/ $dalam Komponen Anda, Jika tsLint Aktif untuk jenis Pemeriksaan Jenis ini.

Untuk eg.

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

"Jika mereka telah menginstal pengetikan mereka" Saya tidak mengerti. Maksudmu BUKAN diinstal? Mengapa menyatakannya sebagai sebaliknya? Saya hanya ingin mengkompilasi tanpa kesalahan dan tidak menginstal hal-hal tambahan dan saya bekerja dengan libs yang tidak memiliki tipe untuk menginstal.
redanimalwar

@redanimalwar Saya pikir saya menulis itu, karena dalam proyek web seperti reactjs / angular, jika webpack dikonfigurasi secara manual, perpustakaan pihak ke-3 didefinisikan secara global, dan sulit untuk memberitahu webpack dari mana perpustakaan ini diimpor, sehingga declarekata kunci digunakan. Tapi, tetap saja kita bisa memberi tahu vscode tentang pengetikan jika ada node_modules, itu sebabnya penginstalan pengetikan membantu di intellisense, tetapi untuk proyek vanpack webpack, tanpa declaregagal dalam transkripsi proyek kata kunci. Saya telah menghapus pernyataan saya dari jawaban, untuk tidak membingungkan orang.
phoenisx

Ngomong-ngomong, saya sudah lama tidak mengutak-atik Angular / Typescript, tapi saya merasa, jika pengetikan diinstal, kita bisa melakukan sesuatu seperti ini - import JQuery from 'jquery'; declare var $: JQuery;. Tidak yakin, apakah ini akan berhasil.
phoenisx

Saya telah menggunakan - typescriptlang.org/docs/handbook/… , di tsconfig, untuk menekan masalah tipe pihak ke-3.
phoenisx

3

Jika Anda ingin menggunakan jquery dalam aplikasi web (mis. Bereaksi) dan jquery sudah dimuat <script src="jquery-3.3.1.js"...

Di halaman web yang dapat Anda lakukan:

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

jadi, Anda tidak perlu memuat jquery untuk kedua kalinya (dengan npm install --save jquery) tetapi memiliki semua kelebihan dari Typecript


2

Inilah langkah-langkah konfigurasi TypeScript & jQuery saya.

Itu membuat dukungan tipe jQuery untuk bekerja lebih baik daripada kebanyakan artikel di internet . ( Aku percaya. )

pertama:

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




kedua (sangat sangat sangat penting!!!):

import jquery = require("jquery");



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




lalu, Anda Bisa Menikmatinya:

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




Halus seperti sutra !!!


jadi, harus menuliskannya di setiap komponen file ts?
Humble Dolt

@HumbleDolt Jika Anda mengikat jQuery di 【window】, Anda hanya perlu menambahkan declare global { interface Window { $ :JQueryStatic; } }di yourTypeDeclaration.d.ts Anda. Dan dengan pertimbangan yang benar, Anda perlu memeriksa apakah $ sudah terpasang di 【window】. Seperti import $ = require('jquery'); window.$ = $ ;, atau jQuery Anda 【$】 telah dipasang oleh tag skrip eksternal.
Lancer.

maksud Anda, dapatkah menyertakan skrip di index.html dan menulisnya di sana? typeDeclaration.ts di sudut 8? ada tsconfig.json
Humble Dolt

@ HumbleDolt Jadi, Anda dapat mencoba solusi kedua import $ = require('jquery') ; window.$ = $;. (Anda sebaiknya init ini, di titik awal proyek Anda. Dan saya lebih suka membuat sdkdir, untuk mengelola semua persyaratan lib luar dan inisial dalam satu file atau tempat).
Lancer.

@HumbleDolt 【yourTypeDeclaretion.d.ts】 hanyalah sebuah file Type-Defined. Ini adalah file khusus untuk mendefinisikan tipe diri Anda. Dalam TypeScript, 【.d.ts】 hanyalah cara isolasi eksplisit, untuk membedakan type-recognition dan true-code. Anda juga dapat menulis snipet tipe-deklarasi-dalam file 【.ts】, masih akan berfungsi. (mungkin dengan pemberitahuan perbaikan tata bahasa)
Lancer.

1

Ini berfungsi untuk saya sekarang dan hari ini di versi Angular 9

  1. Instal melalui npm ini: npm i @ types / jquery cukup tambahkan --simpan ke pengaturan secara global.
  2. Pergi ke tsconfig.app.json dan tambahkan dalam jquery "types" array.
  3. ng servis dan selesai.

0

Ini bekerja untuk saya:

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

1
Ini akan berfungsi tetapi tidak akan berfungsi sebagai sangat diketik, yang kehilangan manfaat menggunakannya dengan TypeScript sebuah pekerjaan di sekitar jika Anda mau untuk perpustakaan eksternal. Masih pendekatan yang cukup menarik.
bnns
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.