网站搜索

javascript - Google 标签管理器 dataLayer 类型错误:ES6


有人能向我解释一下为什么吗

(<any>window).dataLayer2 = (<any>window).dataLayer2 || [];

不会抛出错误并且

(<any>window).dataLayer = (<any>window).dataLayer || [];

会抛出类型错误:"错误:无法解析 'dataLayer'"

我需要能够访问 Google Analytics 的全局变量,但不确定为什么这不起作用,也不清楚如何将其暴露给 ES6。

我正在使用 webpack 和 TypeScript,并已将其添加到我的 index.ejs,如下所示:

<body aurelia-app="main">
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-okoko" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>
   (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
   new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
   j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
   'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
   })(window,document,'script','dataLayer','GTM-ookok');
</script>

答案#1

我正在使用 TypeScript 2.9.2

typings.d.ts

interface Window { dataLayer: any; }

app.ts

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({...});

查看更多关于此的其他答案:

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

如何处理 TypeScript 中内置对象的专有/自定义属性警告