Cách sử dụng jQuery với TypeScript


158

tôi đang cố gắng

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

Nó hiển thị lỗi này trong Visual Studio : (TS) Cannot find name '$'.. Làm cách nào để sử dụng jQuery với TypeScript?


3
Bạn chỉ có thể bao gồm dòng nàyimport * as $ from "jquery";
jcubic

Câu trả lời:


209

Nhiều khả năng bạn cần tải xuống và bao gồm tệp khai báo TypeScript cho jQuery jquery.d.ts.

Tùy chọn 1: Cài đặt gói @types (Được khuyến nghị cho TS 2.0+)

Trong cùng thư mục với tệp pack.json của bạn , hãy chạy lệnh sau:

npm install --save-dev @types/jquery

Sau đó trình biên dịch sẽ tự động giải quyết các định nghĩa cho jquery.

Tùy chọn 2: Tải xuống thủ công (Không khuyến nghị)

Tải về ở đây .

Tùy chọn 3: Sử dụng kiểu chữ (Pre TS 2.0)

Nếu bạn đang sử dụng typings sau đó bạn có thể đưa nó theo cách này:

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

Sau khi thiết lập tệp định nghĩa, nhập bí danh ( $) trong tệp TypeScript mong muốn để sử dụng tệp như bình thường.

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

Bạn có thể cần phải biên dịch với --allowSyntheticDefaultImportssiêu dữ liệu "allowSyntheticDefaultImports": truetrong tsconfig.json .

Cũng cài đặt gói?

Nếu bạn chưa cài đặt jquery, có lẽ bạn muốn cài đặt nó dưới dạng phụ thuộc qua npm (nhưng điều này không phải lúc nào cũng đúng):

npm install --save jquery

6
Phải khởi động lại studio hình ảnh để nó hoạt động, bước nhỏ nhưng vấp tôi một chút.
William Howley

1
@daslicht kiểm tra câu hỏi này
David Sherret

6
để giúp đỡ người khác: Sau đó, bạn chỉ cần cài đặt jquery: npm cài đặt jquery và sử dụng nó với nhập $ = Yêu cầu ('jquery');
Jonathan

28
Cũng có thể sử dụngimport * as $ from 'jquery'
gldraphael

1
Tôi đang gặp lỗiError TS1192 Module '"jquery"' has no default export.
Karthik

29

Trong trường hợp của tôi, tôi đã phải làm điều này

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

Sau đó trong tập tin kịch bản A.ts

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

26

CHO mã Visual Studio

Điều làm việc với tôi là đảm bảo tôi thực hiện tải thư viện JQuery tiêu chuẩn thông qua thẻ <script> trong index.html.

Chạy

npm install --save @types/jquery

Bây giờ các hàm JQuery $ đã có sẵn trong tất cả các tệp .ts, không cần bất kỳ nhập khác.


2
Bạn cần phải khai báo jquery / $ trong Thành phần của mình, nếu TsLint được bật cho các loại Kiểm tra loại này. Ví dụ javascript declare var jquery: any; declare var $: any;
phoenisx

1
@Subroto, Đề xuất của bạn đang hoạt động tốt. Đặt nó như một câu trả lời. Cảm ơn.
yW0K5o

21

Tôi tin rằng bạn có thể cần các kiểu đánh máy cho JQuery. Vì bạn nói bạn đang sử dụng Visual Studio, bạn có thể sử dụng Nuget để lấy chúng.

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

Lệnh trong Bảng điều khiển quản lý gói Nuget là

Install-Package jquery.TypeScript.DefinitelyTyped

Cập nhật: Như đã lưu ý trong nhận xét, gói này chưa được cập nhật từ năm 2016. Nhưng bạn vẫn có thể truy cập trang Github của họ tại https://github.com/DefiniteTyped/DefiniteTyped và tải xuống các loại. Điều hướng thư mục cho thư viện của bạn và sau đó tải xuống index.d.tstệp ở đó. Pop nó bất cứ nơi nào trong thư mục dự án của bạn và VS nên sử dụng nó ngay lập tức.


2
Gói nuget cho DefiniteTypes không còn được duy trì. Bạn sẽ nhận được một phiên bản cũ nếu bạn làm điều này.
Dave de Jong

17

Đối với CLI góc 7

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

Đảm bảo jquery có một mục trong angular.json -> script

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

Truy cập tsconfig.app.json và thêm một mục trong "loại"

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

Thuộc tính 'phương thức' không tồn tại trên loại 'JQuery <HTMLEuity>'. gặp lỗi này sau khi thêm
user2900572

12

CẬP NHẬT 2019:

Trả lời của David , là chính xác hơn.

Bản in hỗ trợ các thư viện nhà cung cấp bên thứ 3, không sử dụng Bản in để phát triển thư viện, sử dụng DefiniteTyped Repo .


Bạn cần phải khai báo jquery/ $trong Thành phần của mình, Nếu tsLint được Bật cho các loại Kiểm tra Loại này.

Ví dụ

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

"nếu họ cài đặt kiểu gõ" Tôi không hiểu. Bạn có nghĩa là KHÔNG cài đặt? Tại sao lại tuyên bố chúng như bất kỳ cách nào khác? Tôi chỉ muốn biên dịch mà không có lỗi và không cài đặt thêm bất kỳ thứ gì và tôi đang làm việc với các lib không có loại để cài đặt.
redanimalwar

@redanimalwar Tôi nghĩ rằng tôi đã viết điều đó, bởi vì trong các dự án web như Reacjs / angular, nếu webpack được cấu hình thủ công, các thư viện bên thứ 3 được xác định trên toàn cầu và rất khó để nói webpack nơi các thư viện này được nhập từ đó, do đó declaretừ khóa được sử dụng. Tuy nhiên, chúng ta vẫn có thể nói với vscode về các kiểu chữ nếu chúng có mặt node_modules, đó là lý do tại sao việc cài đặt các kiểu chữ giúp ích trong intellisense, nhưng đối với một dự án webpack vanilla, không có phiên dịch declaretừ khóa dự án thất bại. Tôi đã loại bỏ tuyên bố của tôi từ câu trả lời, để không gây nhầm lẫn cho mọi người.
phoenisx

Dù sao, tôi đã không sử dụng Angular / Typecript trong một thời gian dài, nhưng tôi cảm thấy, nếu các kiểu chữ được cài đặt, chúng ta có thể đã làm một cái gì đó như thế này - import JQuery from 'jquery'; declare var $: JQuery;. Không chắc chắn, nếu điều này sẽ làm việc.
phoenisx

Tôi đã được sử dụng - typescriptlang.org/docs/handbook/... , trong tsconfig, để ngăn chặn các vấn đề loại bên thứ 3.
phoenisx

3

Nếu bạn muốn sử dụng jquery trong một ứng dụng web (ví dụ React) và jquery đã được tải với <script src="jquery-3.3.1.js"...

Trên trang web bạn có thể làm:

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

vì vậy, bạn không cần phải tải jquery lần thứ hai (với npm install --save jquery) nhưng có tất cả các lợi thế của Bản mô tả


2

Đây là các bước cấu hình TypeScript & jQuery của tôi.

Nó làm cho các kiểu của jQuery hỗ trợ để hoạt động tốt hơn hầu hết các bài viết trên internet . ( Tôi tin. )

Đầu tiên:

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




thứ hai (rất rất rất rất quan trọng!!):

import jquery = require("jquery");



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




sau đó, bạn có thể thưởng thức nó:

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




Nó mượt mà !!!


Vì vậy, phải viết nó trong mỗi tập tin ts thành phần?
Khiêm tốn Dolt

@HumbleDolt Nếu bạn liên kết jQuery trên 【window】, bạn chỉ cần thêm declare global { interface Window { $ :JQueryStatic; } }vào yourTypeDeclaration.d.ts. Và trong việc xem xét đúng đắn, bạn cần kiểm tra xem $ có được gắn trong cửa sổ 【không. Chẳng hạn như import $ = require('jquery'); window.$ = $ ;, hoặc jQuery $ $ của bạn đã được gắn bởi thẻ script bên ngoài.
Lancer.Yan

ý bạn là, có thể bao gồm một tập lệnh trong index.html và viết nó ở đó không? typeDeclaration.ts trong góc 8? có tsconfig.json
Dolt khiêm tốn

@HumbleDolt Vì vậy, bạn có thể thử giải pháp thứ hai import $ = require('jquery') ; window.$ = $;. (Bạn nên khởi tạo cái này tốt nhất, trong điểm bắt đầu dự án của bạn. Và tôi thích tạo một sdkthư mục, để quản lý tất cả các yêu cầu của lib bên ngoài và ban đầu trong một tệp hoặc địa điểm).
Lancer.Yan

@HumbleDolt 【yourTypeDeclaretion.d.ts】 chỉ là một tệp Xác định loại. Nó là một tập tin đặc biệt để xác định loại tự của bạn. Trong TypeScript, 【.d.ts】 chỉ là một cách cô lập rõ ràng, để phân biệt nhận dạng kiểu và mã thật. Bạn cũng có thể viết snipet khai báo kiểu trong tệp 【.ts】, nó vẫn sẽ hoạt động. (có thể với một số thông báo sửa lỗi ngữ pháp)
Lancer.Yan

1

Điều này làm việc cho tôi bây giờ và hôm nay tại Angular phiên bản 9

  1. Cài đặt qua npm này: npm i @ type / jquery chỉ cần thêm --save để thiết lập toàn cầu.
  2. Truy cập tsconfig.app.json và thêm vào mảng "type" jquery.
  3. ng phục vụ và thực hiện.

0

Điều này làm việc cho tôi:

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

1
Điều này sẽ hoạt động nhưng sẽ không hoạt động như được gõ mạnh, làm mất các lợi ích của việc sử dụng nó với TypeScript, một công việc xung quanh nếu bạn sẽ cho các thư viện bên ngoài. Vẫn là một cách tiếp cận khá thú vị.
bnns
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.