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

97

я пытаюсь

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

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

  • 0
    Вы можете просто включить эту строку import * as $ from "jquery";
Теги:

8 ответов

147

Скорее всего, вам нужно скачать и включить файл определения TypeScript для jQuery - jquery.d.ts - в ваш проект.

Вариант 1. Установите пакет @types (рекомендуется для TS 2. 0+)

В той же папке, что и файл package.json, выполните следующую команду:

npm install --save-dev @types/jquery

Затем компилятор автоматически разрешит определения для jquery.

Вариант 2: скачать вручную

Загрузите это здесь.

Вариант 3: Использование печатания

Если вы используете набор текста, вы можете включить его следующим образом:

// 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 добавьте "allowSyntheticDefaultImports": true в tsconfig.json.

  • 5
    Пришлось перезагрузить визуальную студию, чтобы она заработала, маленький шаг, но меня немного сбило с толку.
  • 0
    как вы используете новую npm install --save-dev @types/jquery ? Где найти больше информации об этом, пожалуйста?
Показать ещё 9 комментариев
19

FOR Код Visual Studio

Что для меня работает, так это убедиться, что я выполняю стандартную загрузку библиотеки JQuery через script > в index.html.

Run

npm install --save @types/jquery

Теперь функции JQuery $доступны во всех файлах .ts, без необходимости каких-либо других импортов.

  • 0
    это сработало для меня. Это работает для любой библиотеки?
  • 2
    Вам нужно объявить jquery / $ в вашем Компоненте, если TsLint включен для этих типов проверок типов. Например, javascript declare var jquery: any; declare var $: any;
Показать ещё 3 комментария
19

Я считаю, что для JQuery вам могут понадобиться машинописные машинописи. Поскольку вы сказали, что используете Visual Studio, вы можете использовать Nuget для их получения.

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

Команда в консоли Nuget Package Manager

Install-Package jquery.TypeScript.DefinitelyTyped

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

  • 1
    Пакет nuget для DefiniteTypes больше не поддерживается. Вы получите старую версию, если сделаете это.
8

В моем случае я должен был сделать это

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

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

Напр.

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

Это отлично работает с другими сторонними библиотеками, если они установлены.

3

Для углового 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"
]
}
0

Я пишу сообщение в блоге здесь, чтобы решить эту проблему

0

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

export var jQuery: any = window["jQuery"];
  • 0
    Это будет работать, но не будет работать как строго типизированный, что лишает преимуществ использования его с TypeScript обходным путем, если вы будете использовать для внешних библиотек. Все еще довольно интересный подход.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню