如何在JavaScript/TypeScript混合项目中引用`window`变量

36 浏览
0 Comments

如何在JavaScript/TypeScript混合项目中引用`window`变量

我通过在window上显式设置一个属性来为我的对象设置全局名称空间。

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

TypeScript会强调 MyNamespace,然后抱怨:

该类型 \"window any\" 的值上不存在 \'MyNamespace\' 属性

我可以通过将MyNamespace声明为环境变量并且去掉window的明确性来使代码工作,但我不想这么做。

declare var MyNamespace: any;
MyNamespace = MyNamespace || {};

如何在保留window的情况下使TypeScript快乐呢?

顺便说一下,我发现TypeScript抱怨实在有趣,因为它告诉我window任意(any)类型,绝对可以包含任何值。

admin 更改状态以发布 2023年5月21日
0
0 Comments

为了保持它的动态性,只需使用:

(window).MyNamespace

请注意,这可能与TSX不兼容,因为编译器可能会认为这个答案适用于类型断言,这个答案与TSX不兼容。

0
0 Comments

我刚刚在另一个Stack Overflow问题的答案中找到了这个答案。

declare global {
    interface Window { MyNamespace: any; }
}
window.MyNamespace = window.MyNamespace || {};

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

0