TypeScriptでjQueryを使用する方法


158

やっています

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

Visual Studioでこのエラーが表示されています:(TS) Cannot find name '$'.。TypeScriptでjQueryを使用するにはどうすればよいですか?


3
この行を含めることができますimport * as $ from "jquery";
jcubic

回答:


209

ほとんどの場合、jQuery用のTypeScript宣言ファイルをダウンロードしてjquery.d.ts、プロジェクトに含める必要があります。

オプション1:@typesパッケージをインストールします(TS 2.0+に推奨)

package.jsonファイルと同じフォルダーで、次のコマンドを実行します。

npm install --save-dev @types/jquery

次に、コンパイラーはjqueryの定義を自動的に解決します。

オプション2:手動でダウンロードする(非推奨)

こちらからダウンロードしてください

オプション3:タイピングを使用する(Pre 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");

tsconfig.json--allowSyntheticDefaultImports-addを使用"allowSyntheticDefaultImports": trueしてコンパイルする必要がある場合があります。

パッケージもインストールしますか?

jqueryがインストールされていない場合は、おそらくnpmを介して依存関係としてインストールする必要があります(ただし、常にそうであるとは限りません)。

npm install --save jquery

6
それを機能させるためにビジュアルスタジオを再起動する必要がありましたが、小さなステップで少しの間つまずきました。
ウィリアムハウリー2016年


6
他の人を助けるために:次にjqueryをインストールする必要があります:npm install jqueryそしてそれをimport $ = require( 'jquery');で使用します。
ジョナサン

28
また使用可能import * as $ from 'jquery'
gldraphael 2017

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

FOR Visual Studioのコード

私にとってうまくいくのは、index.htmlの<script>タグを介して標準のJQueryライブラリを確実にロードすることです。

走る

npm install --save @types/jquery

JQuery $関数がすべての.tsファイルで使用できるようになりました。他のインポートは必要ありません。


2
これらのタイプのタイプチェックでTsLintがオンの場合、コンポーネントでjquery / $を宣言する必要があります。たとえば javascript declare var jquery: any; declare var $: any;
phoenisx 2017年

1
@Subroto、あなたの提案はうまくいきます。それを答えとしてください。ありがとう。
yW0K5o 2018

21

私はあなたがJQueryのためにTypescriptタイピングを必要とするかもしれないと信じています。Visual Studioを使用していると言ったので、Nugetを使用して取得できます。

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

Nuget Package Manager Consoleのコマンドは

Install-Package jquery.TypeScript.DefinitelyTyped

更新:コメントに記載されているように、このパッケージは2016年以降更新されていません。ただし、https://github.com/DefinitelyTyped/DefinitelyTypedの Githubページにアクセスして、タイプをダウンロードできます。ライブラリのフォルダーに移動し、index.d.tsそこにファイルをダウンロードします。それをプロジェクトディレクトリの任意の場所にポップすると、VSはすぐにそれを使用する必要があります。


2
DefinitelyTypesのnugetパッケージは維持されなくなりました。これを行うと、古いバージョンが取得されます。
Dave de Jong

17

Angular 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に移動し、「types」にエントリを追加します

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

プロパティ「モーダル」はタイプ「JQuery <HTMLElement>」に存在しません。追加後にこのエラーが発生する
user2900572

12

アップデート2019:

Davidの回答はより正確です。

Typescriptは、DefinitelyTyped Repoを使用して、ライブラリ開発にTypescriptを使用しないサードパーティベンダーライブラリをサポートしています。


これらのタイプのタイプチェックでtsLintがオンの場合、コンポーネントでjquery/ を宣言する必要があり$ます。

たとえば

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

「タイピングがインストールされている場合」取得できません。インストールされていませんか?なぜそれらを他のように宣言するのですか?エラーなしでコンパイルし、余分なものをインストールしないようにしたいだけで、インストールするタイプのないライブラリで作業しています。
redanimalwar

@redanimalwar私が書いたと思うのは、reactjs / angularなどのWebプロジェクトでは、webpackを手動で構成すると、サードパーティのライブラリがグローバルに定義され、これらのライブラリのインポート元をwebpackに指示することが難しいため、declareキーワードが使用されるためです。しかし、それらがに存在する場合は、vscodeに型付けについて伝えることができますnode_modules。そのため、型付けをインストールするとインテリセンスで役立ちますが、バニラwebpackプロジェクトの場合、declareキーワードプロジェクトの翻訳が失敗します。人々を混乱させないために、答えから自分の声明を削除しました。
phoenisx

とにかく、私は長い間Angular / Typescriptをいじっていませんが、タイピングがインストールされていれば、次のようなことができると思いimport JQuery from 'jquery'; declare var $: JQuery;ます。これが機能するかどうかはわかりません。
phoenisx

私が使用している- typescriptlang.org/docs/handbook/...を、TSconfigの中で、サードパーティのタイプの問題を抑制することができます。
-phoenisx

3

Webアプリケーション(Reactなど)でjqueryを使用したい場合、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




2番目(非常に非常に非常に重要!!!):

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 Dolt

@HumbleDolt【ウィンドウ】にjQueryをバインドする場合はdeclare global { interface Window { $ :JQueryStatic; } }、yourTypeDeclaration.d.tsに追加するだけです。そして、ちゃんと考えて、【ウィンドウ】に$がマウントされているかチェックする必要があります。などimport $ = require('jquery'); window.$ = $ ;、またはjQuery【$】が外部スクリプトタグによってマウントされています。
Lancer.Yan

つまり、index.htmlにスクリプトを含めて、そこに記述できますか?typeDeclaration.tsは角度8ですか?tsconfig.jsonがあります
Humble Dolt

@HumbleDoltしたがって、2番目の解決策を試すことができますimport $ = require('jquery') ; window.$ = $;。(プロジェクトの開始点でこれを初期化するのが最善です。またsdk、すべての外部libの要件とイニシャルを1つのファイルまたは場所で管理するためにdir を作成することをお勧めします)。
Lancer.Yan

@HumbleDolt【yourTypeDeclaretion.d.ts】は、型定義ファイルです。自己型を定義するための特別なファイルです。TypeScriptでは、【。d.ts】は、型認識と真のコードを区別するための単なる明示的な分離方法です。type-declaration-snipetを[.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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.