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()), проверьте значение или уточните структуру. Если типы верны, а результат неправильный, изучите журнал пробного запуска.