【发布时间】:2015-11-10 02:31:37
【问题描述】:
我在努力
$(function(){
alert('Hello');
});
它在 Visual Studio 中显示此错误:(TS) Cannot find name '$'.。如何将 jQuery 与 TypeScript 一起使用?
【问题讨论】:
-
你可以只包含这行
import * as $ from "jquery";
标签: typescript
我在努力
$(function(){
alert('Hello');
});
它在 Visual Studio 中显示此错误:(TS) Cannot find name '$'.。如何将 jQuery 与 TypeScript 一起使用?
【问题讨论】:
import * as $ from "jquery";
标签: typescript
您很可能需要下载并在您的项目中包含用于 jQuery 的 TypeScript declaration file——jquery.d.ts。
选项 1:安装 @types 包(推荐用于 TS 2.0+)
在与您的 package.json 文件相同的文件夹中,运行以下命令:
npm install --save-dev @types/jquery
然后编译器会自动解析jquery的定义。
选项 2:手动下载(不推荐)
下载here。
选项 3:使用打字(TS 2.0 之前)
如果您使用的是typings,那么您可以这样包含它:
// 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 进行编译——在 tsconfig.json 中添加 "allowSyntheticDefaultImports": true。
还要安装软件包吗?
如果您没有安装 jquery,您可能希望通过 npm 将其安装为依赖项(但并非总是如此):
npm install --save jquery
【讨论】:
import * as $ from 'jquery'
Error TS1192 Module '"jquery"' has no default export.
就我而言,我必须这样做
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 ...
【讨论】:
对于 Visual Studio 代码
对我有用的是确保我通过 index.html 中的 标记加载标准 JQuery 库。
运行
npm install --save @types/jquery
现在 JQuery $ 函数在所有 .ts 文件中都可用,不需要任何其他导入。
【讨论】:
javascript declare var jquery: any; declare var $: any;
对于 Angular CLI V2+
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 的 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 应该立即使用它。
【讨论】:
2019 年更新:
David的回答更准确。
Typescript 支持不使用 Typescript 进行库开发的 3rd 方供应商库,使用 DefinitelyTyped Repo。
您确实需要在您的组件中声明 jquery/$,如果这些类型的类型检查的 tsLint 为 On。
例如。
declare var jquery: any;
declare var $: any;
【讨论】:
declare 关键字。但是,如果它们存在于 node_modules 中,我们仍然可以告诉 vscode 有关类型的信息,这就是为什么在智能感知中安装类型有帮助的原因,但是对于一个普通的 webpack 项目,没有 declare 关键字项目编译失败。我已从答案中删除了我的陈述,以免混淆。
import JQuery from 'jquery'; declare var $: JQuery;。不确定,这是否可行。
这是我的 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 !')
}
}
丝般柔滑!!!
【讨论】:
declare global { interface Window { $ :JQueryStatic; } }即可。并在适当考虑时,您需要检查 $ 是否安装在【window】中。比如import $ = require('jquery'); window.$ = $ ;,或者你的jQuery【$】已经被外部脚本标签挂载了。
import $ = require('jquery') ; window.$ = $;。 (你最好在你的项目起点初始化这个。而且我更喜欢创建一个sdk dir,来管理所有外部库的要求和初始在一个文件或位置)。
如果您想在 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 的所有优点
【讨论】:
现在和今天在 Angular 版本 9 上为我工作
【讨论】:
您可以通过扩充窗口界面来声明全局变量:
import jQuery from '@types/jquery';
declare global {
interface Window {
jQuery: typeof jQuery;
$: typeof jQuery;
}
}
来源:
【讨论】:
我在 ASP.Net 核心项目中的 VS 2019 程序。所以我不必乱用 npm 命令行实用程序,而是使用 npm 配置文件采取声明性方法。
你的项目根目录中有 package.json(npm 依赖项配置)吗?
npm Configuration File并保持默认文件名package.json
在 devDependencies 下添加一个条目。这告诉 npm 安装“@types/jquery”,这是一个由 DeveloplyTyped 维护的 npm 包。这与其他答案中显示的 npm install 命令基本相同。
"devDependencies": {
"@types/jquery": "3.5.1"
}
假设保存文件后,这应该会触发 npm 包安装。我发现我必须右键单击 package.json 文件并单击 Restore Packages(项目处于调试模式时未显示该选项)。
打开您自己的打字稿文件,然后将 index.d.ts 从解决方案资源管理器拖到打开的打字稿文件的第一行。这应该在顶部添加(相对路径将根据您的打字稿文件的位置而有所不同):
/// <reference path="../node_modules/@types/jquery/index.d.ts" />
现在,如果您开始在 typescript 文件的函数中编写代码,您应该能够输入 jQue 并获得智能感知完成提示。
注意:最近 VS 在重新启动之前无法正确反映各种变化真的很糟糕,尤其是涉及错误输入和智能感知的事情。即使在官方 MS 文档中,您也经常可以看到它们提到需要重新启动以解决红色波浪线等问题。因此,如有疑问,请关闭/重新打开 VS。最后一步是您最有可能发现智能感知在您重新启动之前无法工作的地方。
无论您是否使用非 npm 方法包含 jQuery,此方法都有效。例如,在一个项目中,我们没有使用导入、npm、js 模块,也没有使用 requireJS 来解决依赖关系。 jQuery 只是来自 html 页面的脚本标签链接。但是,我仍然可以引用 .d.ts jQuery typedefs 以获得打字稿完成/类型解析。
我可以轻松地在 package.json 中为 "jquery": "3.5.1" 添加一个依赖项来获取 jQuery 本身。
还要注意,如果 VS 工作正常,它在 package.json 中有一些缓慢的(由于网络查询)名称和版本完成提示:
【讨论】:
这对我有用:
export var jQuery: any = window["jQuery"];
【讨论】:
安装 jquery 和 @types/jquery(作为开发依赖)后,使用此导入:
import * as $ from "jquery";
就我而言,只有这种方式才有帮助。 (角度9)
【讨论】: