Введите утверждение для возвращаемого значения страницы кукловода. $ Eval обещание - PullRequest
0 голосов
/ 09 апреля 2020

Я пишу приложение nodejs с кукловодом, и у меня возникают проблемы с типом возврата его page.$eval. Рассмотрим следующий кодовый блок:

import puppeteer, { Page } from "puppeteer";

const getValueBySelector = (page: Page, selector: string) => {
  return page.$eval(selector, (el) => el.innerText);
};

interface Prices {
  low: string;
}
(async () => {
  const browser = await puppeteer.launch();
  const page: Page = await browser.newPage();
  await page.goto(URL);
  let prices: Prices = {
    low: await getValueBySelector(page, "#low"),
  };
})();

В соответствии с автоматизированным c выводом типа для getValueBySelector тип возврата для этой функции Promise<puppeteer.ElementHandle<any>>, но мне нужно, чтобы значение prices.low было string.

Итак, в prices.low есть ошибка типа, которая гласит:

Type 'ElementHandle<any>' is not assignable to type 'string'.ts(2322)

Как мне использовать здесь утверждение типа для решения проблемы?

1 Ответ

0 голосов
/ 09 апреля 2020

Поскольку я прокомментировал вопрос, я считаю, что это ошибка в файле определения. Но $eval - это не что иное, как вызов $, а затем evaluate. Так что вы можете сделать что-то вроде:

const getValueBySelector = async (page: Page, selector: string) => {
  const el = await page.$(selector);
  if (el)
    return await page.evaluate((el) => el.innerText, el);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...