我如何在React或Next中添加一个按钮的GTM事件处理程序?

26 浏览
0 Comments

我如何在React或Next中添加一个按钮的GTM事件处理程序?

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

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

TypeScript会强调MyNamespace并抱怨:

值为“window any”的对象上不存在属性“MyNamespace”

我可以通过声明MyNamespace作为环境变量并丢弃window的明确性来使代码工作,但我不想这样做。

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

如何在保留window的同时使TypeScript感到满意?

顺便提一下,我发现特别有趣的是TypeScript抱怨,因为它告诉我window是任何类型,因此肯定可以包含任何东西。

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

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

(window).MyNamespace

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

0
0 Comments

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

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

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

0