在TypeScript中,如何显式地在`window`上设置一个新的属性?

26 浏览
0 Comments

在TypeScript中,如何显式地在`window`上设置一个新的属性?

我通过明确定义window上的属性来为我的对象设置全局命名空间。

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

TypeScript会强调MyNamespace并抱怨:

属性“MyNamespace”在类型“window”上不存在

any”

我可以声明MyNamespace作为一个环境变量,省略window的明确性以使代码生效,但我不想这样做。

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

该如何保留window并使TypeScript满意?

顺便说一下,我发现特别有趣的是TypeScript抱怨,因为它告诉我window是任何类型,明显可以包含任何内容。

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

为保持其动态性,只需使用:

(window).MyNamespace

。请注意,这可能无法在TSX中工作,因为编译器可能会认为这个答案用于类型断言与TSX兼容。

0
0 Comments

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

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

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

0