你如何在 TypeScript 的 `window` 上显式设置一个新属性? [英] How do you explicitly set a new property on `window` in TypeScript?

查看:25
本文介绍了你如何在 TypeScript 的 `window` 上显式设置一个新属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我通过在 window 上显式设置属性来为我的对象设置全局命名空间.

window.MyNamespace = window.MyNamespace ||{};

TypeScript 在 MyNamespace 下划线并抱怨:

<块引用>

窗口"类型的值上不存在属性MyNamespace"任何"

我可以通过将 MyNamespace 声明为环境变量并删除 window 明确性来使代码工作,但我不想这样做.

声明 var MyNamespace: any;我的名字空间 = 我的名字空间 ||{};

我怎样才能让 window 保持在那里并使 TypeScript 开心?

作为旁注,我发现 TypeScript 抱怨特别有趣,因为它告诉我 windowany 类型,它绝对可以包含任何内容.

解决方案

刚刚在 另一个 StackOverflow 问题的答案中找到了答案

一>.

声明全局{interface Window { MyNamespace: any;}}window.MyNamespace = window.MyNamespace ||{};

基本上,您需要扩展现有的 window 接口来告诉它您的新属性.

I setup global namespaces for my objects by explicitly setting a property on window.

window.MyNamespace = window.MyNamespace || {};

TypeScript underlines MyNamespace and complains that:

The property 'MyNamespace' does not exist on value of type 'window' any"

I can make the code work by declaring MyNamespace as an ambient variable and dropping the window explicitness but I don't want to do that.

declare var MyNamespace: any;

MyNamespace = MyNamespace || {};

How can I keep window in there and make TypeScript happy?

As a side note I find it especially funny that TypeScript complains since it tells me that window is of type any which by definitely can contain anything.

解决方案

Just found the answer to this in another StackOverflow question's answer.

declare global {
    interface Window { MyNamespace: any; }
}

window.MyNamespace = window.MyNamespace || {};

Basically you need to extend the existing window interface to tell it about your new property.

这篇关于你如何在 TypeScript 的 `window` 上显式设置一个新属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆