【问题标题】:Property 'src' does not exist on type 'Element'.ts(2339) and Type 'string | null' is not assignable to type 'string''Element'.ts(2339) 类型和类型'string | 上不存在属性'src' null' 不可分配给类型 'string'
【发布时间】:2021-10-21 15:44:39
【问题描述】:

我一直在玩这些代码,但仍然不断出错。

const zoom = () => {
  const images = document.querySelectorAll(".voice-details__zoom");
  const modal = document.querySelector(".modal");
  const modalImg = document.querySelector(".modalImg");
  const modalTxt = document.querySelector(".modalTxt");
  const close = document.querySelector(".close");

  images.forEach((image) => {
    image.addEventListener("click", () => {
      let imgSrc = image.getAttribute('data-src');
      modalImg.src = imgSrc; //2 errors
      modalTxt.innerHTML = image.getAttribute('data-alt'); //2 errors
      modal?.classList.add("appear");

      close?.addEventListener("click", () => {
        modal?.classList.remove("appear");
      });
    });
  });
}

以下是编译器的错误: 上午 10:06:36 - 检测到文件更改。开始增量编译... [观看:ts] [watch:ts] src/js/components/zoom.ts(15,7):错误 TS2531:对象可能为“空”。 [watch:ts] src/js/components/zoom.ts(15,16):错误 TS2339:“元素”类型上不存在属性“src”。 [watch:ts] src/js/components/zoom.ts(16,7):错误 TS2531:对象可能为“空”。 [watch:ts] src/js/components/zoom.ts(16,7): error TS2322: Type 'string | null' 不可分配给类型 'string'。 [watch:ts] 类型 'null' 不可分配给类型 'string'。

【问题讨论】:

    标签: javascript html typescript


    【解决方案1】:

    让我们来一一解决错误。

    src/js/components/zoom.ts(15,7): error TS2531: Object is possible is 'null'.

    如果querySelector(".modalImg") 调用未能找到匹配元素,则错误提示modalImg 可能是null。因此,要修复此错误,我们应该在找到 modalImg 时分配属性。

    if (modalImg) modalImg.src = imgSrc;
    

    src/js/components/zoom.ts(15,16):错误 TS2339:“元素”类型上不存在属性“src”。

    除了null 检查,这里还需要typecast,因为src 不是Element 的属性,而是HTMLImageElement 的子类型。

    if (modalImg) {
        (<HTMLImageElement>modalImg).src = imgSrc;
    }
    

    src/js/components/zoom.ts(16,7): error TS2531: Object is possible is 'null'.

    modalTxt 也需要 null 检查

    if (modalTxt) modalTxt.innerHTML = ... ;
    

    src/js/components/zoom.ts(16,7): 错误 TS2322: Type 'string | null' 不能分配给类型 'string'

    错误是抱怨image.getAttribute('data-alt') 可能是null,因此不能分配给innerHTML 字符串 属性。因此,要修复此错误,我们可以使用 OR ||nullish coalescing ?? 运算符。

    if (modalTxt) {
        modalTxt.innerHTML = image.getAttribute('data-alt') ?? "";
    }
    

    【讨论】:

    • 感谢您回答这个问题,最后一个问题,我怎样才能删除新的错误?我按照代码进行操作,但出现 2 个错误 -> 赋值表达式的左侧可能不是可选属性 access.ts(2779)
    • @KirbyTan 请检查我的更新,它现在应该可以正常工作了。
    猜你喜欢
    • 2020-07-05
    • 2021-08-02
    • 2021-09-26
    • 1970-01-01
    • 2021-09-06
    • 2021-06-12
    • 2021-04-21
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多