Як користуватися jQuery з TypeScript


158

я намагаюся

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

Його показує цю помилку в Visual Studio: (TS) Cannot find name '$'.. Як я можу використовувати jQuery з TypeScript?


3
Ви можете просто включити цей рядокimport * as $ from "jquery";
jcubic

Відповіді:


209

Швидше за все, вам потрібно завантажити та включити файл декларації TypeScript для jQuery—jquery.d.ts у свій проект.

Варіант 1: Встановіть пакет @types (рекомендується для TS 2.0+)

У тій самій папці, що і ваш файл package.json , запустіть таку команду:

npm install --save-dev @types/jquery

Тоді компілятор вирішить визначення для jquery автоматично.

Варіант 2: Завантажити вручну (не рекомендується)

Завантажте його тут .

Варіант 3: Використання типів (попередньо TS 2.0)

Якщо ви використовуєте типізацію, тоді ви можете включити її так:

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

Після налаштування файлу визначення імпортуйте псевдонім ( $) у потрібний файл TypeScript, щоб використовувати його як зазвичай.

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

Можливо, вам знадобиться компілювати з --allowSyntheticDefaultImports—add "allowSyntheticDefaultImports": trueв tsconfig.json .

Також встановити пакет?

Якщо у вас не встановлено jquery, ви, ймовірно, хочете встановити його як залежність через npm (але це не завжди так):

npm install --save jquery

6
Довелося перезавантажити візуальну студію, щоб вона працювала, невеликим кроком, але трохи спонукала мене.
Вільям Хоулі

1
@daslicht перевіримо це питання
Девід Шеррет

6
щоб допомогти іншим: тоді вам просто потрібно встановити jquery: npm встановити jquery і використовувати його з імпортом $ = requ ('jquery');
Джонатан

28
Можна також використовуватиimport * as $ from 'jquery'
gldraphael

1
Я отримую помилкуError TS1192 Module '"jquery"' has no default export.
Karthik

29

У моєму випадку мені довелося це зробити

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

Потім у файл сценарію A.ts

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

26

ДЛЯ коду Visual Studio

Що для мене працює - це переконатися, що я виконую стандартне завантаження бібліотеки JQuery за допомогою <script> тег у index.html.

Біжи

npm install --save @types/jquery

Тепер функції JQuery $ доступні у всіх .ts-файлах, не потрібно жодного іншого імпорту.


2
Вам потрібно оголосити jquery / $ у своєму компоненті, якщо TsLint увімкнено для цих типів перевірок типів. Напр. javascript declare var jquery: any; declare var $: any;
phoenisx

1
@Subroto, Ваша пропозиція працює нормально. Поставте це як відповідь. Дякую.
yW0K5o

21

Я вважаю, що вам можуть знадобитися типізація Typescript для JQuery. Оскільки ви сказали, що використовуєте Visual Studio, ви можете використовувати Nuget, щоб отримати їх.

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

Команда в Nuget Package Manager Console є

Install-Package jquery.TypeScript.DefinitelyTyped

Оновлення: Як зазначається в коментарі, цей пакет не оновлювався з 2016 року. Але ви все одно можете відвідати їхню сторінку Github за адресою https://github.com/DefinitelyTyped/DefinitelyTyped та завантажити типи. Перейдіть до папки вашої бібліотеки та завантажте index.d.tsфайл туди. Надішліть його будь-де в каталозі проектів, і VS повинен використовувати його відразу.


2
Пакет nuget для DefinitelyTypes більше не підтримується. Ви отримаєте стару версію, якщо це зробите.
Дейв де Йонг

17

Для кутових CLI V7

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

Переконайтеся, що у jquery є запис у сценаріїх angular.json ->

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

Перейдіть на сторінку tsconfig.app.json і додайте запис у "типах"

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

Властивість 'modal' не існує для типу 'JQuery <HTMLElement>'. отримати цю помилку після додавання
user2900572

12

ОНОВЛЕННЯ 2019:

Відповідь Девіда - точніша.

Typescript підтримує сторонні бібліотеки постачальників, які не використовують Typescript для розробки бібліотек, використовуючи DefinitelyTyped Repo .


Вам потрібно оголосити jquery/ $у своєму компоненті, якщо для цих типів перевірок типів tsLint увімкнено.

Напр.

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

"якщо у них встановлено набір тексту", я не розумію. Ви маєте на увазі НЕ встановлений? Чому декларувати їх як інакше? Я просто хочу компілювати без помилок і не встановлювати зайвих речей, і я працюю з libs, які не мають типів для встановлення.
redanimalwar

@redanimalwar Я думаю, що я це написав, оскільки у веб-проектах, таких як reactjs / angular, якщо webpack налаштовується вручну, сторонні бібліотеки визначаються у всьому світі, і важко сказати webpack, звідки ці бібліотеки імпортуються, і таким чином declareвикористовується ключове слово. Але все ж ми можемо розповісти vscode про типінги, якщо вони є node_modules, тому встановлення типінгів допомагає в intellisense, але для ванільного проекту webpack без declareтрансляції проекту ключових слів не вдається. Я зняв свою заяву з відповіді, щоб не бентежити людей.
phoenisx

У будь-якому разі, я давно не спіткався з Angular / Typescript, але я відчуваю, що якби встановити типізацію, ми могли б зробити щось подібне - import JQuery from 'jquery'; declare var $: JQuery;. Не впевнений, чи це спрацює.
Phoenisx

Я використовую - typescriptlang.org/docs/handbook / ... , в TSconfig, щоб придушити запитання 3 - го типу сторони.
phoenisx

3

Якщо ви хочете використовувати jquery у веб-додатку (наприклад, React), і jquery вже завантажений <script src="jquery-3.3.1.js"...

На веб-сторінці ви можете:

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

тож вам не потрібно завантажувати jquery вдруге (з npm install --save jquery), але маєте всі переваги Typescript


2

Ось мій етап конфігурації TypeScript & jQuery.

Це робить підтримку типів jQuery для роботи краще, ніж більшість статей в Інтернеті . ( Я вірю. )

перший:

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




друге (дуже-дуже важливо!!):

import jquery = require("jquery");



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




тоді Ви можете насолоджуватися цим:

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




Це шовковисто гладко !!!


Отже, доведеться писати його у кожен компонент ts-файл?
Humble

@HumbleDolt Якщо ви пов'язуєте jQuery у 【вікні】, вам просто потрібно додати declare global { interface Window { $ :JQueryStatic; } }у yourTypeDeclaration.d.ts. А якщо правильно розглянути, вам потрібно перевірити, чи встановлено $ у вікні 【. Наприклад import $ = require('jquery'); window.$ = $ ;, або ваш jQuery 【$】 був змонтований зовнішнім тегом скрипту.
Lancer.Ян

ви маєте на увазі, можете включити скрипт в index.html і написати це там? typeDeclaration.ts у кутовій 8? є tsconfig.json
Humble

@HumbleDolt Отже, ви можете спробувати друге рішення import $ = require('jquery') ; window.$ = $;. (Ви б найкраще запустити цю, у початковій точці вашого проекту. І я вважаю за краще створити sdkредактор, щоб керувати всіма вимогами зовнішньої конвеєра та початковим файлом в одному файлі чи місці).
Lancer.Ян

@HumbleDolt 【yourTypeDeclaretion.d.ts】 - це лише файл, визначений типом. Це спеціальний файл для визначення типів вашої самості. У TypeScript 【.d.ts】 є лише явним способом ізоляції для розрізнення розпізнавання типу та істинного коду. Ви також можете записати фрагмент декларації типу у файл ts .ts】, він все одно буде працювати. (можливо, з повідомленням про виправлення граматики)
Lancer.Yan

1

Ця робота для мене зараз і сьогодні в кутовій версії 9

  1. Встановіть через npm це: npm i @ types / jquery просто додайте --save для налаштування в усьому світі.
  2. Перейдіть на сторінку tsconfig.app.json і додайте до масиву jquery масив.
  3. Подаємо і готово.

0

Це працює для мене:

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

1
Це буде працювати, але не буде функціонувати настільки сильно набрано, що втрачає переваги використання його з TypeScript для обходу, якщо вам потрібно для зовнішніх бібліотек. Все ще досить цікавий підхід.
bnns
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.