我该如何解决错误 "TS2339: Property 'gauge' does not exist on type 'JQuery<HTMLElement>'."

How do I resolve error "TS2339: Property 'gauge' does not exist on type 'JQuery<HTMLElement>'."

我正在开发一个离子(版本 4)应用程序,我想实现一个自定义仪表。

因为,我是 jQuery 的新手,我不确定这个错误到底是什么意思。

我正在使用 jQuery 插件 jquery-gauge.min.js,其中包含如下所示的方法 gauge(),它在任何 Web 应用程序中都可以正常工作。

import {
  Component,
  ViewChild,
  ElementRef,
  AfterViewInit,
  OnInit
} from '@angular/core';
import * as $ from 'jquery';

@Component({
  selector: 'app-tab1',
  templateUrl: 'tab1.page.html',
  styleUrls: ['tab1.page.scss']
})

export class Tab1Page implements OnInit {
  ngOnInit(): void {
    $('.gauge1').gauge({
      values: {
        0: '',
        10: '',
        20: '',
        30: '',
        40: '',
        50: '',
        60: '',
        70: '',
        80: 'Tier 1',
        90: 'Tier 2',
        100: 'Tier 3',
      },
      colors: {
        0: '#1aff1a',
        75.5: '#1aff1a',
        75.6: '#515e80',
        80: "#515e80",
        90: "#515e80",
      },
      angles: [
        180,
        360
      ],
      lineWidth: 10,
      arrowWidth: 0,
      arrowColor: '#ccc',
      value: 75.5
    });
  }
}

当我在离子应用程序上实现它时,它在 $('.gauge').gauge({...})

行抛出错误

error "TS2339: Property 'gauge' does not exist on type 'JQuery'

我已将 jquery-gauge.min.js 添加到 angular.json 文件中的脚本中。

我该如何解决这个错误?

可能是因为此函数是在 javascript 加载您的仪表功能之前执行的。

尝试使用 ngAfterViewChecked() 生命周期挂钩而不是 ngOnInit()

在导入语句之后添加这个

import {
  Component,
  ViewChild,
  ElementRef,
  AfterViewInit,
  OnInit
} from '@angular/core';
import * as $ from 'jquery';

declare interface JQuery<HTMLElement> {
 gauge(...args): any;
}
...

找到解决方案。

使用jQuery('.gauge1').guage()代替$('.gauge1').guage()

虽然我是 jQuery 的新手,但我不知道插件在不同平台上的行为可能有何不同(不知道为什么会这样)但是,当我在 .js 中使用插件时文件在网络应用程序中使用 $('.guage').gauge() 工作,但是当我将它与离子一起使用(或者应该说与 .ts 文件一起使用)时,它需要 jQuery('.guage').guage() 而不是。

如果有人能解释为什么会这样。那也会很感激和有帮助。

谢谢。