首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安装@type/jquery会导致不必要的全局$声明

安装@type/jquery会导致不必要的全局$声明
EN

Stack Overflow用户
提问于 2021-11-19 20:11:26
回答 1查看 185关注 0票数 2

我在package.json中定义了以下内容

代码语言:javascript
运行
复制
{
  "dependencies": {
    "@types/jquery": "^3.5.5",
  }
}

通过@types/jquery/misc.d.ts添加以下类型声明

代码语言:javascript
运行
复制
declare const jQuery: JQueryStatic;
declare const $: JQueryStatic;

现在我为我的所有模块定义了全局$jQuery变量,但是这不仅仅是不想要的.这是错误的。类似于以下代码的代码在运行时会崩溃,因为TypeScript编译器认为$是全局的,而实际上必须导入它:

代码语言:javascript
运行
复制
// $ is never imported here, and jQuery is not initialized globally in the browser

export function foo(node?:JQueryXML):void {
    node.children().each(function(_, el) {
        let node = $(el);
        if (node.attr("type") === VALUE) {
            doStuff();
        }
    });
}

为了确定,我试着在@types/jquery/misc.d.ts中注释掉这两行声明,得到了预期的错误:

代码语言:javascript
运行
复制
error TS2592: Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery` and then add 'jquery' to the types field in your tsconfig.

40    let node = $(el);

但是,我现在已经有效地禁用了所有jQuery类型检查。我还得到了一个额外的50+错误,因为我正确导入$的所有其他模块都将变量视为any

我如何告诉TypeScript编译器我想要@types/jquery中的类型定义,但是$而不是是一个有效的全局变量?

EN

回答 1

Stack Overflow用户

发布于 2021-11-19 20:44:23

可以显式地告诉TypeScript types在编译器选项中搜索:https://www.typescriptlang.org/tsconfig#types

从医生那里:

默认情况下,所有可见的“@

”包都包含在您的编译中。任何封装文件夹的node_modules/@类型中的包都被认为是可见的。例如,这意味着./node_node/@type/、./node_node/@type/、././node_node/@type/等等中的包。

如果指定了类型,则只将列出的包包括在全局范围内。

在这种情况下,编译器将自动包含来自node_modules/@types/jquery的全局类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70040434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档