如何将 "adsbygoogle" AdSense 属性 添加到 Typescript 中的 "window" 全局对象?
How to add "adsbygoogle" AdSense property to the "window" global object in Typescript?
我有一个组件可以在我的网络应用程序上呈现 <AdSense/>
广告单元。
在 index.html
中,我有以下 AdSense 代码:
<script data-ad-client="XXXXXX" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
此脚本可能将 adsbygoogle
属性 注入 window
对象。
但是在我的组件上,我必须像这样使用 属性:
useEffect(()=>{
(window.adsbygoogle = window.adsbygoogle || []).push({});
},[]);
当我的项目在 JavaScript 时这很好,但现在我已经切换到 Typescript,我出现以下错误:
ERROR in src/components/ads/AdSenseBanner.tsx:74:13
TS2339: Property 'adsbygoogle' does not exist on type 'Window & typeof globalThis'.
我如何声明这个 属性 让 Typescript 理解它是什么?
我试过的:
我创建了一个 d.ts
用于全局声明。
AMBIENT.d.ts
以下无效。
declare const adsbygoogle: {[key: string]: unknown}[];
以下似乎有效(就消除错误而言)。但是它触发了一个新的错误:
declare var adsbygoogle: {[key: string]: unknown}[];
以下文章帮助我找到了解决方案:
https://mariusschulz.com/blog/declaring-global-variables-in-typescript
AMBIENT.d.ts
interface Window {
adsbygoogle: {[key: string]: unknown}[]
}
来自那篇文章:
Augmenting the Window Interface
Lastly, you can use TypeScript's interface declaration merging to let the compiler know that it can expect to find a property named INITIAL_DATA on the Window type and therefore the window object. To do that, you'll need to define an interface named Window with a property named INITIAL_DATA:
TypeScript will merge this interface definition together with the Window interface defined in lib.dom.d.ts, resulting in a single Window type. Now, the following assignment will no longer produce a type error:
以下片段是我使用的...
declare let adsbygoogle: any;
(adsbygoogle = (window as any).adsbygoogle || []).push({});
顶行也可以移动到 .d.ts
文件。
我有一个组件可以在我的网络应用程序上呈现 <AdSense/>
广告单元。
在 index.html
中,我有以下 AdSense 代码:
<script data-ad-client="XXXXXX" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
此脚本可能将 adsbygoogle
属性 注入 window
对象。
但是在我的组件上,我必须像这样使用 属性:
useEffect(()=>{
(window.adsbygoogle = window.adsbygoogle || []).push({});
},[]);
当我的项目在 JavaScript 时这很好,但现在我已经切换到 Typescript,我出现以下错误:
ERROR in src/components/ads/AdSenseBanner.tsx:74:13
TS2339: Property 'adsbygoogle' does not exist on type 'Window & typeof globalThis'.
我如何声明这个 属性 让 Typescript 理解它是什么?
我试过的:
我创建了一个 d.ts
用于全局声明。
AMBIENT.d.ts
以下无效。
declare const adsbygoogle: {[key: string]: unknown}[];
以下似乎有效(就消除错误而言)。但是它触发了一个新的错误:
declare var adsbygoogle: {[key: string]: unknown}[];
以下文章帮助我找到了解决方案:
https://mariusschulz.com/blog/declaring-global-variables-in-typescript
AMBIENT.d.ts
interface Window {
adsbygoogle: {[key: string]: unknown}[]
}
来自那篇文章:
Augmenting the Window Interface
Lastly, you can use TypeScript's interface declaration merging to let the compiler know that it can expect to find a property named INITIAL_DATA on the Window type and therefore the window object. To do that, you'll need to define an interface named Window with a property named INITIAL_DATA:
TypeScript will merge this interface definition together with the Window interface defined in lib.dom.d.ts, resulting in a single Window type. Now, the following assignment will no longer produce a type error:
以下片段是我使用的...
declare let adsbygoogle: any;
(adsbygoogle = (window as any).adsbygoogle || []).push({});
顶行也可以移动到 .d.ts
文件。