You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IdleDetector时TypeScript提示找不到名称的解决方法咨询

解决TypeScript中IdleDetector类型未定义的问题

以下是几种可行的解决方式:

  • 手动添加全局类型声明
    在项目任意位置创建一个.d.ts后缀的类型声明文件(比如global.d.ts),写入IdleDetector的类型定义,让TypeScript识别这个浏览器API:

    declare interface IdleDetector {
      start(options?: { threshold: number; signal?: AbortSignal }): Promise<void>;
      addEventListener(type: 'change', listener: (event: Event) => void): void;
      removeEventListener(type: 'change', listener: (event: Event) => void): void;
      // 可根据MDN文档补充其他所需的属性或方法
    }
    
    declare var IdleDetector: {
      new(): IdleDetector;
      requestPermission(): Promise<'granted' | 'denied'>;
    };
    

    保存后,TypeScript会自动加载这个声明文件,不再报错。

  • 更新TypeScript的lib配置
    检查项目根目录的tsconfig.json,确保compilerOptions.lib字段包含最新的ES和DOM相关库,让TypeScript尽可能覆盖更多浏览器API:

    {
      "compilerOptions": {
        "lib": ["ESNext", "DOM", "DOM.Iterable"]
      }
    }
    

    注意:如果TypeScript版本较旧,可能仍未包含IdleDetector的类型,此时还是需要结合第一种方法。

  • 临时使用类型断言绕过检查
    如果只是快速验证功能,不想编写完整类型声明,可以用类型断言临时跳过TypeScript的类型检查(不推荐长期使用,会失去类型提示的优势):

    (async () => {
      const permission = await (IdleDetector as any).requestPermission();
      if (permission === 'granted') {
        const detector = new (IdleDetector as any)();
        detector.addEventListener('change', (event: any) => {
          console.log(event.userState, event.screenState);
        });
        await detector.start({ threshold: 60000 });
      }
    })();
    

内容的提问来源于stack exchange,提问作者Teiem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:32:45