Skip to content

Робота з TypeScript: Створення оголошення типів AdsGram

Для інтеграції AdsGram з використанням TypeScript створіть файл adsgram.d.ts і додайте його в папку types або існуючу папку з оголошеннями типів.

Інформація

Якщо ви використовуєте наші спеціалізовані npm-пакети для React або Vue, підтримка TypeScript вже вбудована і вам не потрібно вручну оголошувати типи.

Типізація API AdsGram

ts
export interface ShowPromiseResult {
  done: boolean; // true, якщо реклама додивилася до кінця, інакше false
  description: string; // опис події
  state: 'load' | 'render' | 'playing' | 'destroy'; // поточний стан банера
  error: boolean; // true, якщо сталося подія помилки, інакше false
}

type BannerType = 'RewardedVideo' | 'FullscreenMedia';

interface AdsgramInitParams {
  blockId: string; // унікальний ідентифікатор рекламного блоку
  debug?: boolean; // debug режим (опціонально)
  debugBannerType?: BannerType; // тип тестового банера (опціонально)
}

type EventType =
  | 'onReward' // користувач отримав нагороду за перегляд реклами
  | 'onComplete' // користувач додивився Interstitial банер або закрив його
  | '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
      };
    }
}

Типізація веб-компонента <adsgram-task> для проектів на react/preact

Додайте наступний код в adsgram.d.ts, щоб описати типи для використання веб-компонента <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>;
    }
  }
}

Примітки

  • Типи подій (EventType):
    Ці типи описують події, на які можна підписатися за допомогою методу addEventListener.
  • Глобальне оголошення (global):
    Вказує, що Adsgram доступний в глобальному об'єкті window.
  • Типізація веб-компонента:
    Дозволяє використовувати <adsgram-task> з коректними типами.