全局引入jQuery时Angular CLI报TS2304:找不到'$'的解决问询
解决Angular中全局使用jQuery时TS2304找不到
$的错误 你遇到的情况很典型:VSCode能通过tsconfig识别全局类型,但Angular的TypeScript编译器没同步识别,导致报错,同时直接import * as $ from 'jquery'会破坏插件的全局类型关联。下面给你两个可行的解决方案:
方案1:在tsconfig.json中明确指定全局类型
在compilerOptions里添加types数组,把jquery加进去,让编译器主动加载它的全局类型:
{ "compilerOptions": { // 其他配置... "typeRoots": [ "node_modules/@types" ], "types": ["jquery"] // 新增这一行 } }
这个方案能让编译器正确识别全局的$和jQuery,同时因为插件的类型(比如datatables)本身依赖@types/jquery,所以插件的类型也能正常被VSCode识别,不会出现之前的问题。
方案2:手动声明全局变量(兜底方案)
如果方案1不生效,可以在项目的src目录下创建一个typings.d.ts文件,手动声明全局的$和jQuery:
declare var $: JQueryStatic; declare var jQuery: JQueryStatic;
因为你已经安装了@types/jquery,JQueryStatic类型是现成的,所以这个声明会直接复用已有的类型定义,既解决编译器报错,又不影响插件的类型使用。
为什么import * as $ from 'jquery'不可行?
当你用import导入时,$会变成模块级别的局部变量,而不是全局变量。但你通过angular-cli的scripts引入的jQuery插件是挂载在**全局$**上的,VSCode的类型系统无法把模块级的$和插件挂载的全局$关联起来,所以就会丢失插件的类型提示,这也是这个方案不可行的核心原因。
内容的提问来源于stack exchange,提问作者Stevanicus
相关产品推荐
相关产品推荐

