К содержимому

Документация

TypeScript SDK: Типы, подсказки и ошибки

Начните с типизированной точки входа. Контекст предоставляет платформа: создавать его и вызывать run() вручную не нужно.

async function run(ctx: Akmelo.Context): Promise<void> {
  const limit = ctx.param<number>('max_items', 20);
  const response = await ctx.http().get(ctx.param<string>('catalog_url'));
  if (!response.ok()) ctx.fail(`HTTP ${response.status}`);
  const payload: unknown = response.json();
  if (!Array.isArray(payload)) ctx.fail('Ожидался массив товаров');
  let saved = 0;
  for (const value of payload) {
    if (typeof value !== 'object' || value === null) continue;
    if (!('sku' in value) || typeof value.sku !== 'string') continue;
    ctx.emit({ sku: value.sku }, value.sku);
    if (++saved >= limit) break;
  }
}

ctx.param<T>(), ctx.params<T>(), ctx.json<T>(), response.json<T>() позволяют описать ожидаемый формат. Generic не проверяет данные во время выполнения. Для внешнего JSON безопаснее сначала прочитать unknown, проверить массивы и обязательные поля, а затем работать с уточнённым типом.

Полезные типы SDK

Тип Назначение
Akmelo.Context или Context Параметры и сервисы сценария
Akmelo.Row Запись с произвольными полями Record<string, unknown>
Akmelo.Response, Akmelo.Dom, Akmelo.DomNode Ответ сайта и HTML
Akmelo.Document, Akmelo.Worksheet, Akmelo.Cell Документы, листы и значения ячеек
Akmelo.Price, Akmelo.Comparison Точное сравнение цен

Ошибки в редакторе

Редактор подсвечивает TypeScript, предлагает методы SDK и показывает серверные ошибки рядом со строкой. Проверка запускается после паузы при вводе. Результат для старого текста не применяется к новому. При сохранении сервер повторяет проверку независимо от браузера.

TS2322 означает несовместимые типы: например, строка вместо числа. TS2339 означает отсутствующее свойство или метод. TS18046 означает, что неизвестные данные ещё не проверены. Для результата q() проверяйте null или используйте ?.; для сетевого метода не забывайте await.

Не скрывайте проблему приведением типа: as не изменяет данные. Исправьте преобразование (Number, ctx.text().money()), проверьте значение или уточните структуру. Если типы верны, а результат неправильный, изучите журнал пробного запуска.

Справочник Context · Документы