TypeQ ile jQuery nasıl kullanılır


158

deniyorum

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

Onun Visual Studio bu hatayı gösteren: (TS) Cannot find name '$'.. JQuery'yi TypeScript ile nasıl kullanabilirim?


3
Bu satırı sadece ekleyebilirsinizimport * as $ from "jquery";
jcubic

Yanıtlar:


210

Büyük olasılıkla indirmek gerekir ve şunları typescript beyanı dosyasını jQuery için jquery.d.tsprojenize -in.

Seçenek 1: @types paketini yükleyin (TS 2.0+ için önerilir)

Package.json dosyanızla aynı klasörde aşağıdaki komutu çalıştırın:

npm install --save-dev @types/jquery

Derleyici jquery tanımlarını otomatik olarak çözecektir.

2. Seçenek: Manuel Olarak İndirin (Önerilmez)

Buradan indirin .

Seçenek 3: Tipleri Kullanma (Pre TS 2.0)

Yazıları kullanıyorsanız , bu şekilde ekleyebilirsiniz:

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

Tanım dosyasını ayarladıktan sonra, $normalde yaptığınız gibi kullanmak için diğer TypeScript dosyasındaki diğer adı ( ) içe aktarın .

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

--allowSyntheticDefaultImportsTsconfig.json "allowSyntheticDefaultImports": trueiçindeki —add ile derlemeniz gerekebilir .

Ayrıca Paket Yüklensin mi?

Yüklü jquery yoksa, muhtemelen npm aracılığıyla bir bağımlılık olarak yüklemek istersiniz (ancak bu her zaman böyle değildir):

npm install --save jquery

6
Çalışması için görsel stüdyosu yeniden başlatmak zorunda kaldım, küçük adım ama beni biraz attı.
William Howley

1
@daslicht Bu soruyu
David Sherret

6
başkalarına yardım etmek için: O zaman jquery: npm install jquery kurmanız ve import $ = requir ('jquery') ile kullanmanız gerekir;
Jonathan

28
Ayrıca kullanabilirsinizimport * as $ from 'jquery'
gldraphael

1
Hata alıyorumError TS1192 Module '"jquery"' has no default export.
Karthik

29

Benim durumumda bunu yapmak zorunda kaldım

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

Sonra komut dosyasında A.ts

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

26

Visual Studio Kodu İÇİN

Benim için işe yarar , index.html bir <script> etiketi üzerinden standart JQuery kitaplığı yükleme yapmak emin olmaktır .

Çalıştırmak

npm install --save @types/jquery

Artık JQuery $ fonksiyonları tüm .ts dosyalarında mevcuttur, başka bir içe aktarmaya gerek yoktur.


2
Bu tür Tür Denetimleri için TsLint Açıksa, Bileşeninizde jquery / $ bildirmeniz gerekir. Örn. javascript declare var jquery: any; declare var $: any;
phoenisx

1
@ Subroto, Öneriniz iyi çalışıyor. Bir cevap olarak koy. Teşekkürler.
yW0K5o

21

JQuery için daktilo yazımları gerekebilir inanıyorum. Visual Studio kullandığınızı söylediğinizden, onları almak için Nuget'i kullanabilirsiniz.

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

Nuget Paket Yöneticisi Konsolu'ndaki komut

Install-Package jquery.TypeScript.DefinitelyTyped

Güncelleme: Yorumda belirtildiği gibi bu paket 2016'dan beri güncellenmemiştir. Ancak yine de https://github.com/DefinitelyTyped/DefinitelyTyped adresindeki Github sayfalarını ziyaret edebilir ve türleri indirebilirsiniz. Kitaplığınızın klasörüne gidin ve index.d.tsdosyayı orada indirin. Proje dizininizin herhangi bir yerine yerleştirin ve VS hemen kullanmalıdır.


2
DefinitelyTypes için nuget paketi artık korunmamaktadır. Bunu yaparsanız eski bir sürüm alırsınız.
Dave de Jong

17

Açısal CLI V7 için

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

Jquery'nin angular.json -> komut dosyalarında bir girişi olduğundan emin olun

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

Tsconfig.app.json adresine gidin ve "türler" içine bir giriş ekleyin

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

'JQuery <HTMLElement>' türünde 'modal' özelliği yok. ekledikten sonra bu hatayı alıyorum
user2900572

12

GÜNCELLEME 2019:

Tarafından cevap David , daha doğru.

Typescript, DefinitelyTyped Repo kullanarak kitaplık geliştirme için Typescript kullanmayan 3. taraf satıcı kitaplıklarını destekler .


Bu tür Tip Kontrolleri için tsLint Açıksa, Bileşeninizde jquery/ $bileşenini bildirmeniz gerekir .

Örn.

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

"Eğer kendi yazım yüklü varsa" Ben anlamıyorum. Yüklü DEĞİL demek istiyorsun? Neden başka türlü ilan ettiniz? Sadece hatasız derlemek ve herhangi bir ekstra malzeme yüklemek istemiyorum ve yüklemek için hiçbir türü olmayan kütüphaneler ile çalışıyorum.
redanimalwar

@redanimalwar Sanırım şunu yazdım, çünkü reaktjs / açısal gibi web projelerinde, webpack manuel olarak yapılandırılırsa, üçüncü taraf kütüphaneler küresel olarak tanımlanır ve webpack'e bu kütüphanelerin nereden alındığını söylemek zordur, bu nedenle declareanahtar kelime kullanılır. Ancak, yine de, eğer varsa kodları yazım kodları hakkında söyleyebiliriz node_modules, bu yüzden yazımları yüklemek akıllıca yardımcı olur, ancak bir vanilya webpack projesi için, declareanahtar kelime projesi transpilasyonu başarısız olur. İnsanları karıştırmamak için ifademi yanıttan kaldırdım.
phoenisx

Her neyse, uzun zamandır Açısal / Dizgi ile uğraşmadım, ama yazımlar kurulsa böyle bir şey yapabileceğimizi hissediyorum import JQuery from 'jquery'; declare var $: JQuery;. Emin değilim, eğer işe yarayacaksa.
phoenisx

Ben üçüncü taraf türü sorunları bastırmak için tsconfig, - typescriptlang.org/docs/handbook/… kullanıyorum .
phoenisx

3

Bir web uygulamasında (örn. React) jquery kullanmak istiyorsanız ve jquery zaten yüklenmişse <script src="jquery-3.3.1.js"...

Web sayfasında şunları yapabilirsiniz:

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

bu nedenle, jquery'yi ikinci kez (ile npm install --save jquery) yüklemenize gerek yoktur, ancak Typcript'in tüm avantajlarına sahip olursunuz


2

İşte benim TypeScript ve jQuery yapılandırma adımları.

JQuery'nin türlerini internetteki çoğu makaleden daha iyi çalışmasını destekler . ( İnanıyorum. )

ilk:

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




ikinci (çok çok çok önemli!!!):

import jquery = require("jquery");



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




o zaman, tadını çıkarabilirsiniz:

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




İpeksi pürüzsüz !!!


yani, her bileşen ts dosyasına yazmak zorunda?
Humble Dolt

@HumbleDolt jQuery'yi 【penceresine】 bağlarsanız, yalnızca declare global { interface Window { $ :JQueryStatic; } }TypeDeclaration.d.ts dosyasına eklemeniz gerekir . Ve düzgün bir şekilde düşünün, 【penceresine】 $ monte edilip edilmediğini kontrol etmeniz gerekir. Mesela import $ = require('jquery'); window.$ = $ ;veya jQuery 【$】 dış komut etiketi ile monte olmuştur.
Lancer.Yan

yani, index.html dosyasına bir komut dosyası ekleyebilir ve oraya yazabilir misiniz? açısal 8 tipTeclaration.ts? orada tsconfig.json
Humble Dolt

@HumbleDolt Böylece, ikinci çözümü deneyebilirsiniz import $ = require('jquery') ; window.$ = $;. (Bunu en iyi, proje başlangıç ​​noktanızda başlatabilirsiniz. Ve ben bir sdkdir oluşturmayı , tüm dış lib gereksinimini yönetmek ve bir dosya veya yerde ilk başlamayı tercih ederim ).
Lancer.Yan

@HumbleDolt 【yourTypeDeclaretion.d.ts】 sadece Tür Tanımlı bir dosyadır. Kendi tiplerinizi tanımlamak için özel bir dosyadır. TypeScript'te, 【.d.ts】, tür tanıma ve doğru kodu ayırt etmek için yalnızca açık bir yalıtım yoludur. Ayrıca, type-declaration-snipet dosyasını bir 【.ts】 dosyasına yazabilirsiniz, yine de çalışır. (belki bazı dilbilgisi düzeltme bildirimi ile)
Lancer.Yan

1

Bu çalışma benim için bugün ve bugün Açısal sürüm 9

  1. Npm ile yükleyin: npm i @ types / jquery sadece - dünya çapında kuruluma kaydedin.
  2. Tsconfig.app.json adresine gidin ve "types" jquery dizisine ekleyin.
  3. hizmet ve bitti.

0

Bu benim için çalışıyor:

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

1
Bu işe yarayacaktır, ancak güçlü bir şekilde yazılmış olarak çalışmaz, bu da harici kütüphaneler için kullanacaksanız, bir çalışma türü olan TypeScript ile kullanmanın faydalarını kaybeder. Hala oldukça ilginç bir yaklaşım.
bnns
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.