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

如何在TypeScript中声明全局变量?Playwright MY_OBJECT报错解决

解决Playwright中page.evaluate无法识别全局MY_OBJECT的TypeScript错误

核心原因

page.evaluate的回调函数运行在浏览器上下文,而非Node.js的全局作用域,直接声明全局变量无法让TypeScript关联到浏览器的window对象上。你需要扩展浏览器的Window接口类型,明确MY_OBJECT是window的属性。

正确的类型声明方式

创建或修改global.d.ts(或任意你命名的.d.ts文件),添加以下代码:

interface Window {
  MY_OBJECT: {
    someMethod: () => void;
  };
}

如果需要用全局模块的方式声明(适用于更复杂的全局类型场景):

declare global {
  interface Window {
    MY_OBJECT: {
      someMethod: () => void;
    };
  }
}

// 必须添加此行,否则TypeScript会将该文件视为模块而非全局类型声明
export {};

确保TypeScript识别声明文件

检查你的tsconfig.json,确认include数组包含了你的.d.ts文件路径,示例配置:

{
  "compilerOptions": { /* 你的现有配置 */ },
  "include": [
    "src/**/*",
    "./global.d.ts" // 替换为你的声明文件实际路径
  ]
}

可选写法:显式引用window.MY_OBJECT

如果不想修改全局类型,也可以在回调中直接通过window访问,并配合类型处理:

// 结合全局类型声明后,可直接写
page.evaluate(
  () => window.MY_OBJECT.someMethod()
)

// 临时兼容写法(不推荐长期使用)
page.evaluate(
  () => (window as any).MY_OBJECT.someMethod()
)

之前的方式无效的原因

你之前直接声明var MY_OBJECT是在Node.js的全局作用域,而page.evaluate的回调属于浏览器环境,TypeScript不会自动关联这两个不同的全局作用域。只有扩展Window接口,才能让TypeScript识别该对象是浏览器全局环境的一部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:40:29