我在package.json
中定义了以下内容
{
"dependencies": {
"@types/jquery": "^3.5.5",
}
}
通过@types/jquery/misc.d.ts
添加以下类型声明
declare const jQuery: JQueryStatic;
declare const $: JQueryStatic;
现在我为我的所有模块定义了全局$
和jQuery
变量,但是这不仅仅是不想要的.这是错误的。类似于以下代码的代码在运行时会崩溃,因为TypeScript编译器认为$
是全局的,而实际上必须导入它:
// $ 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
中注释掉这两行声明,得到了预期的错误:
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
中的类型定义,但是$
是而不是是一个有效的全局变量?
发布于 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
的全局类型。
https://stackoverflow.com/questions/70040434
复制相似问题