Как использовать jQuery с TypeScript


158

я пытаюсь

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

Его показывает эту ошибку в Visual Studio: (TS) Cannot find name '$'.. Как я могу использовать jQuery с TypeScript?


3
Вы можете просто включить эту строкуimport * as $ from "jquery";
jcubic

Ответы:


210

Скорее всего, вам нужно скачать и включить файл декларации 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 и использовать его с import $ = require ('jquery');
Джонатан

28
Можно также использоватьimport * as $ from 'jquery'
gldraphael

1
Я получаю сообщение об ошибкеError TS1192 Module '"jquery"' has no default export.
Картик

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:

Install-Package jquery.TypeScript.DefinitelyTyped

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


2
Пакет nuget для DefiniteTypes больше не поддерживается. Вы получите старую версию, если сделаете это.
Дэйв де Йонг,

17

Для углового CLI V7

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

Убедитесь, что в jquery есть запись в angular.json -> scripts

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

Перейдите в tsconfig.app.json и добавьте запись в «types»

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

Свойство 'модальное' не существует для типа 'JQuery <HTMLElement>'. получить эту ошибку после добавления
user2900572

12

ОБНОВЛЕНИЕ 2019:

Ответ Дэвида , точнее.

Typescript поддерживает библиотеки сторонних поставщиков, которые не используют Typescript для разработки библиотек, используя DefiniteTyped Repo .


Вам необходимо объявить jquery/ $в вашем Компоненте, если tsLint включен для этих типов проверок типов.

Например,

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

«если у них установлена ​​печатная машина», я не понимаю. Вы имеете в виду НЕ установлен? Зачем объявлять их как-либо иначе? Я просто хочу скомпилировать без ошибок и не устанавливать никаких дополнительных вещей, и я работаю с библиотеками, у которых нет типов для установки.
Redanimalwar

@redanimalwar Я думаю, что я написал это, потому что в веб-проектах, таких какactjs / angular, если веб-пакет настраивается вручную, сторонние библиотеки определяются глобально, и трудно определить, откуда эти библиотеки импортированы, поэтому declareиспользуется ключевое слово. Но, тем не менее, мы можем сообщить vscode о типах, если они присутствуют node_modules, поэтому установка типографий помогает в intellisense, но для проекта vanilla webpack без трансплантации проекта с declareключевыми словами происходит сбой. Я убрал свое утверждение из ответа, чтобы не путать людей.
Phoenisx

В любом случае, я давно не играю с Angular / Typescript, но я чувствую, что если бы набор текста был установлен, мы могли бы сделать что-то вроде этого - import JQuery from 'jquery'; declare var $: JQuery;. Не уверен, будет ли это работать.
Phoenisx

Я использовал - typescriptlang.org/docs/handbook/… , в tsconfig, для подавления проблем с типами сторонних разработчиков.
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 компонента?
Смиренный

@HumbleDolt Если вы привязываете jQuery к «окну», вам просто нужно добавить declare global { interface Window { $ :JQueryStatic; } }в yourTypeDeclaration.d.ts. И чтобы правильно рассмотреть, вам нужно проверить, смонтирован ли $ в «окне». Например import $ = require('jquery'); window.$ = $ ;, или ваш jQuery 【$ mounted был смонтирован тегом внешнего скрипта.
Лансер. Ян

Вы имеете в виду, можете включить скрипт в index.html и написать что там? typeDeclaration.ts в угловых 8? есть tsconfig.json
Хамбл

@HumbleDolt Итак, вы можете попробовать второе решение import $ = require('jquery') ; window.$ = $;. (Лучше всего инициировать этот файл в начальной точке вашего проекта. И я предпочитаю создавать sdkкаталог, чтобы управлять требованиями всех внешних библиотек и инициализацией в одном файле или месте).
Лансер. Ян

@HumbleDolt 【yourTypeDeclaretion.d.ts】 - это просто файл с определенным типом. Это специальный файл для определения ваших типов. В TypeScript 【.d.ts】 - это просто явный способ изоляции, позволяющий различать распознавание типов и истинный код. Вы также можете написать сниппет-объявление-типа в файле 【.ts,, он все равно будет работать. (возможно с некоторым исправлением грамматики)
Lancer.Yan

1

Это работает для меня сейчас и сегодня на Angular версии 9

  1. Установите через npm это: npm i @ types / jquery просто добавьте --save для настройки по всему миру.
  2. Перейдите в tsconfig.app.json и добавьте в массив «types» jquery.
  3. NG служить и готово.

0

Это работает для меня:

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

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