使用 Node html 解析器时出错:错误 TS2339:类型不存在 '(TextNode & { valid: boolean; }) | (HTMLElement & { valid: boolean; })

Error while using Node html parser : error TS2339: does not exist on type '(TextNode & { valid: boolean; }) | (HTMLElement & { valid: boolean; })

我正在为我的项目抓取 网站,为此我正在使用 axios,html 解析器使用 node-html-使用这个的解析器我在解析 dom

时遇到这个错误
  " Error TS2339: Property
    'querySelectorAll' does not exist on type '(TextNode & { valid: boolean; }) | (HTMLElement & { valid: boolean; })' "

我写的代码是:

axios.get('url',  config).then((res) => {
      var rawHtml = res.data; 
      const root = parse(rawHtml);
      // console.log(root.querySelectorAll('option')); //Error here
     root: HTMLElement   = root.removeWhitespace() ;  //Error
      const data    =  root.querySelectorAll('option') ;

简而言之,无论我使用节点的任何方法 html 解析我都会收到此错误

我前几天刚 运行 遇到了这个问题。这对我有用:尝试将您创建的元素转换为 HTMLElement。

const root = parse(rawHtml) as HTMLElement;

现在它应该可以使用查询选择器函数而不会出现类型错误。

一定要喜欢它们的交集类型。我今晚打了这个并做了以下...

import { HTMLElement, parse, TextNode } from 'node-html-parser';

type ParseResult = (TextNode & { valid: boolean; }) | (HTMLElement & { valid: boolean; });

const result: ParseResult = parse(rawHTML);
if (result.valid) {
    const root = (result as unknown) as HTMLElement;
    const element = root.querySelector("...");
    // Do something interesting with element here...
}

必须首先转换 result as unknown,因为在 tsconfig.json.

中启用所有严格检查时,尝试直接转换 result as HTMLElement 是错误的