Typescript
创建 adsgram.d.ts
文件,并将其添加到 types
文件夹或现有的类型声明文件夹中。
在 TypeScript 中定义 AdsGram 类型
ts
export interface ShowPromiseResult {
done: boolean; // 用户是否观看到结束
description: string; // 事件描述
state: 'load' | 'render' | 'playing' | 'destroy'; // 广告状态
error: boolean; // 是否发生错误
}
type BannerType = 'RewardedVideo' | 'FullscreenMedia';
interface AdsgramInitParams {
blockId: string; // 区块 ID
debug?: boolean; // 是否启用调试模式
debugBannerType?: BannerType; // 调试广告类型
}
type EventType =
| 'onReward' // 用户观看奖励广告到结束
| 'onComplete' // 用户观看插页式广告到结束或关闭
| 'onStart' // 广告开始展示
| 'onSkip' // 用户关闭广告
| 'onBannerNotFound' // 无广告可展示
| 'onNonStopShow' // 用户尝试连续观看多个广告
| 'onTooLongSession'
| 'onError'; // 播放广告时发生错误
type HandlerType = () => void;
export interface AdController {
show(): Promise<ShowPromiseResult>; // 显示广告并返回结果
addEventListener(event: EventType, handler: HandlerType): void; // 添加事件监听器
removeEventListener(event: EventType, handler: HandlerType): void; // 移除事件监听器
destroy(): void; // 销毁广告控制器
}
declare global {
interface Window {
Adsgram?: {
init(params: AdsgramInitParams): AdController; // 初始化 AdsGram
};
}
}
在 react/preact 项目中 <adsgram-task>
的 type 类型
将以下代码添加到 adsgram.d.ts
中,以描述使用 Web 组件 adsgram-task
的类型:
ts
import { DOMAttributes } from "react";
type CustomElement<T> = Partial<T & DOMAttributes<T> & { children: any }> &
LibraryManagedAttributes;
declare module "react/jsx-runtime" {
namespace JSX {
interface IntrinsicElements extends JSXInternal {
"adsgram-task": CustomElement<HTMLDivElement>;
}
}
}
ts
import { JSXInternal, LibraryManagedAttributes } from 'preact/src/jsx';
import DOMAttributes = JSXInternal.DOMAttributes;
type CustomElement<T> = Partial<T & DOMAttributes<T> & { children: any }> &
LibraryManagedAttributes;
declare module "preact/jsx-runtime" {
namespace JSX {
interface IntrinsicElements extends JSXInternal {
"adsgram-task": CustomElement<HTMLDivElement>;
}
}
}
对于 vue 或 vanilla js 无需添加这些类型。