gtag 函数 Typescript 定义

Sob*_*bik 10 typescript gtag.js

我使用原始的 Javascript 函数

function gtag(){dataLayer.push(arguments);}
Run Code Online (Sandbox Code Playgroud)

然后得到错误:error TS2554: Expected 0 arguments, but got 3.当这样使用时:

gtag('event', 'page_view', { send_to: 'xxxx' }) 我用作// @ts-ignore一种解决方法并且它有效:我在 Google 分析中看到了流量。我想在没有变通方法的情况下正确地完成它,并且我尝试像这样替换 gtag 函数:

function gtag(...args: any) {
  window.dataLayer.push(args)
}
Run Code Online (Sandbox Code Playgroud)

和其他一些变体,但它不起作用。我看到window.dataLayer项目现在包含array而不是Objector Arguments

或者更好的是是否有一些现有的 gtag 包装器类似于react-gtmreact-ga但对于gtagjs

thi*_*ign 18

您可以安装@types/gtag.js. 见https://github.com/DefinitelyTyped/DefinitelyTyped/tree/4d4da2106dcd54af4a0ddeb5e0360f322fd8a5bf/types/gtag.js

  • 遗憾的是该软件包缺少如何使用它的示例。我花了一个小时左右的时间来消除 TS 错误,直到到达这条线 `const gtag: Gtag.Gtag = function () {window.dataLayer.push(arguments);};` (10认同)

wil*_*ire 17

扩展@thisismydesign 的答案。

安装:

yarn add -D @types/gtag.js
Run Code Online (Sandbox Code Playgroud)

它应该在全球范围内自动检测到它。但如果types设置为tsconfig.json,则可能不会。types从配置中删除或添加@types/gtag.js到配置中,如下所示:

"types": ["cypress", "@testing-library/cypress", "@types/gtag.js"],
Run Code Online (Sandbox Code Playgroud)

另请注意,如果添加了此内容,则可能需要删除任何构建目录以阻止诸如 linting 之类的事情挂起。


小智 5

要让我的代码编译它需要比上面多一步..

    npm install --save-dev @types/gtag.js
Run Code Online (Sandbox Code Playgroud)

添加到 tsconfig.json 中的类型

    "types": [..., "@types/gtag.js", ...]
Run Code Online (Sandbox Code Playgroud)

在文件中声明您要使用的函数

    declare let gtag: Function;
Run Code Online (Sandbox Code Playgroud)