当前位置: 首页 > 知识库问答 >
问题:

如何防止"属性'…"不存在的类型'全局'"与js的打字?

傅明知
2023-03-14

我尝试将现有项目转换为使用打字稿,我在测试设置中遇到了问题。

我的测试有一个设置文件,它设置了js写下,以便我所有的DOM交互代码在我的测试期间都能正常工作。使用Typecript(带有mocha的ts节点)我总是收到这样的错误:

Property 'window' does not exist on type 'Global'.

为了防止这种情况,我尝试修补节点。像这样的全局界面:

declare namespace NodeJS{
  interface Global {
    document: Document;
    window: Window;
    navigator: Navigator;
  }
}

但这并没有改变任何事情。

如何在NodeJS全局变量上启用这些浏览器属性?

额外:

这是我的摩卡设置.ts

import { jsdom, changeURL } from 'jsdom';

const exposedProperties = ['window', 'navigator', 'document'];

global.document = jsdom('');
global.window = global.document.defaultView;
Object.keys(global.document.defaultView).forEach((property) => {
  if (typeof global[property] === 'undefined') {
    exposedProperties.push(property);
    global[property] = global.document.defaultView[property];
  }
});

global.navigator = {
  userAgent: 'node.js',
};

changeURL(global.window, 'http://example.com/');

共有3个答案

常永怡
2023-03-14

我通过这样做解决了这个问题。。。

export interface Global {
  document: Document;
  window: Window;
}

declare var global: Global;
湛宏旷
2023-03-14

除其他答案外,您还可以直接在作业现场进行全局

(global as any).myvar = myvar;
濮阳霄
2023-03-14

把这个放在你的打字稿文件的顶部

const globalAny:any = global;

那就改用globalAny。

globalAny.document = jsdom('');
globalAny.window = global.document.defaultView;

如果要保持类型安全,可以扩充现有的 NodeJS.Global 类型定义。

您需要将定义放在全局范围内声明全局{…}

请记住,typescript global范围不同于NodeJS接口< code>global,也不同于称为< code>Global类型的< code>global的节点< code>global属性...

declare global {
  namespace NodeJS {
    interface Global {
       document: Document;
       window: Window;
       navigator: Navigator;
    } 
  }
}
 类似资料:
  • 问题内容: 我有多态类型,并且可以从JSON反序列化为POJO。实际上,我遵循这里的文档。将POJO序列化为JSON时,我得到了不需要的属性,特别是逻辑类型名称。 当Jackson序列化为JSON时,它提供了我不想公开的类型信息。 我可以以某种方式防止这种情况吗?反序列化时我只想忽略。 问题答案: 一个简单的解决方案是将和配置移至,然后仅注册进行反序列化。

  • 我使用的是完全修补过的Visual Studio 2013。我正在尝试使用JQuery、JQueryUI和JSRender。我也在尝试使用打字。在ts文件中,我得到如下错误: 类型“{}”上不存在属性“fade div”。

  • 我试图在登录过程后获得连接的用户模型, 首先,在CanActivate guard检查了带有用户JSON对象的本地存储并发现该对象为空之后,用户将重定向到“/login”URL 然后用户登录并重定向回根URL“/”,在连接过程中我使用AuthService,它将从服务器返回的用户对象保存在用户模型中 这是我的守卫:

  • 我正在使用typescript,并试图创建一个脚本,当文本输入到输入框中时,该脚本将更新p元素。 然而,编译器确实输出了一个javascript文件,这在Chrome中工作得很好。 我怎么会有这个错误?那我该怎么修呢? 另外,根据TypeScript,在哪里可以查找上哪些属性是有效的? 请注意,我对javascript和typescript非常陌生,所以我可能会遗漏一些显而易见的东西。:)

  • 问题内容: 我正在用来创建用户并处理身份验证。 当我尝试通过方法通过简单登录创建新用户时,如果已经使用了电子邮件地址,firebase不会创建该用户。但是,在创建用户并将其用作密钥之后,我还用于将创建的用户保存到我的Firebase中。尝试写入数据库时​​,即使用户名不是唯一的,firebase也会保存记录,因为简单登录只需要电子邮件和密码。因此,当用户名不用作用户对象的密钥时,如何验证其唯一性?

  • 我最近读了Tweag的帖子。关于线性类型是表达参数的有用工具,只(准确地)使用一次。他们提出了以下例子: 现在,也许我误解了这个想法,但为什么不能用以下方法来规避呢: 这篇文章特别提到了论点。这是否也扩展到了函数中的所有绑定?