如何在TypeScript中使用jQuery


158

我在尝试

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

它在Visual Studio中显示此错误:(TS) Cannot find name '$'.。如何在TypeScript中使用jQuery?


3
您可以包括此行import * as $ from "jquery";
jcubic

Answers:


209

您很可能需要下载jQuery 的TypeScript声明文件并将其包括在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");

您可能需要使用— 在tsconfig.json中--allowSyntheticDefaultImports添加进行编译"allowSyntheticDefaultImports": true

还安装软件包?

如果您没有安装jquery,则可能要通过npm将其安装为依赖项(但这并非总是如此):

npm install --save jquery

6
不得不重新启动Visual Studio使其正常工作,迈出了一步,但让我绊了一下。
威廉·霍利,2016年

1
@daslicht检查此问题
David Sherret'Nov

6
帮助他人:然后,您只需要安装jquery:npm install jquery并与import $ = require('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库加载 index.html中标记。

npm install --save @types/jquery

现在,所有.ts文件中都可以使用JQuery $函数,无需任何其他导入。


2
如果这些类型的类型检查的TsLint设置为On,则需要在组件中声明jquery / $。例如 javascript declare var jquery: any; declare var $: any;
phoenisx

1
@Subroto,您的建议工作正常。把它当作答案。谢谢。
yW0K5o

21

我相信您可能需要JQuery的Typescript类型。既然您说您正在使用Visual Studio,则可以使用Nuget来获取它们。

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

Nuget软件包管理器控制台中的命令是

Install-Package jquery.TypeScript.DefinitelyTyped

更新:如评论中所述,此软件包自2016年以来未进行过更新。但是您仍然可以访问其Github页面,网址https://github.com/DefinitelyTyped/DefinitelyTyped并下载类型。浏览您的资料库的文件夹,然后在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并在“类型”中添加一个条目

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

类型“ JQuery <HTMLElement>”上不存在属性“ modal”。添加后收到此错误
user2900572,

12

更新2019:

David的回答更为准确。

Typescript使用DefinitelyTyped Repo支持第三方供应商库,后者不使用Typescript进行库开发。


如果这些类型的类型检查的tsLint为On,则需要在组件中声明jquery/ $

例如

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

“如果他们已经安装了打字程序”,我不会得到它。您的意思是未安装?为什么要另外声明它们?我只想编译时没有错误,并且不安装任何多余的东西,并且我正在使用没有安装类型的库。
redanimalwar

@redanimalwar我想我写了这本书,因为在像reactjs / angular这样的Web项目中,如果手动配置了webpack,则将全局定义第3方库,并且很难告诉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应用程序中使用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的类型支持比Internet上大多数文章更好工作。( 我相信。 )

第一:

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如果在[window]上绑定jQuery,则只需declare global { interface Window { $ :JQueryStatic; } }在yourTypeDeclaration.d.ts中添加。在适当考虑后,您需要检查$是否安装在【窗口】中。例如import $ = require('jquery'); window.$ = $ ;,或者您的jQuery【$】已经被外部脚本标签挂载了。
Lancer.Yan

您的意思是,可以在index.html中包含一个脚本并将其写在那里?角度8中的typeDeclaration.ts?tsconfig.json
Humble Dolt

@HumbleDolt因此,您可以尝试第二种解决方案import $ = require('jquery') ; window.$ = $;。(最好在项目开始时初始化此sdk目录。我更喜欢创建一个dir,以管理所有外部lib的要求并在一个文件或位置中将其开头)。
Lancer.Yan

@HumbleDolt【yourTypeDeclaretion.d.ts】只是一个类型定义的文件。这是定义您自己类型的特殊文件。在TypeScript中,【.d.ts】只是一种显式的隔离方式,用于区分类型识别和真实代码。您也可以在[.ts]文件中写入type-declaration-snipet,它将仍然有效。(也许有一些语法修复通知)
Lancer.Yan

1

Angular 9现在和今天都可以使用此功能

  1. 通过npm安装:npm i @ types / jquery只需添加--save即可进行全局设置。
  2. 转到tsconfig.app.json并添加数组“ types” jquery。
  3. 服务和完成。

0

这对我有用:

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

1
这会起作用,但不能像强类型那样起作用,如果您要使用外部库,则会失去与TypeScript一起使用的好处。还是很有趣的方法。
bnns
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.