我尝试将现有项目转换为使用打字稿,我在测试设置中遇到了问题。
我的测试有一个设置文件,它设置了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/');
我通过这样做解决了这个问题。。。
export interface Global {
document: Document;
window: Window;
}
declare var global: Global;
除其他答案外,您还可以直接在作业现场进行全局
:
(global as any).myvar = myvar;
把这个放在你的打字稿文件的顶部
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的帖子。关于线性类型是表达参数的有用工具,只(准确地)使用一次。他们提出了以下例子: 现在,也许我误解了这个想法,但为什么不能用以下方法来规避呢: 这篇文章特别提到了论点。这是否也扩展到了函数中的所有绑定?