جافاسكريبت - خطأ TS: الخاصية 'dataset' غير موجودة في النوع 'Element'


أواجه هذا الخطأ في الطرفية، أثناء عملية التجميع في بيئة Angular8. على الخادم المحلي أنا أتصفح الصفحة دون أي مشاكل وبدون أي أخطاء في وحدة التحكم. قمت بعمل console.log للمتغير الذي تم تعيين خاصية مجموعة البيانات له، وتمت قراءته بشكل صحيح. أدناه جزء الكود المهتم به:

      let timelineEls = document.querySelectorAll('[data-scroll-timeline]');
  scroll.on("scroll", () => {
    for ( let i = 0; i < timelineEls.length; i++ ) {
      let progress = self.getProgress(timelineEls[i]);
      let timelineKey = timelineEls[i].dataset.scrollTimeline;

      console.log(timelineEls[i].dataset);

      let timeline = timelines[timelineKey]._recent;
      let timeline = timelines[timelineKey];
      let duration = timeline.duration();
      if ( progress > 0 && progress <= 1 ) {
        timeline.seek(progress * duration);
      } else {
        if ( progress <= 0 ) {
          timelines[timelineKey].seek(0);
        } else {
          timelines[timelineKey].seek(duration);
        }
      }
    }
  })

console.log يطبع هذا بشكل صحيح: DOMStringMap {scroll: "", scrollTimeline: "albed-anim"}

هل لديك أي فكرة عن كيفية التخلص من هذا الخطأ؟ أعتقد أنه خطأ في TypeScript ولكني لم أتمكن من العثور على أي أسباب لظهوره وكيفية تجنبه.

شكراً جزيلاً مسبقاً.

الإجابة رقم 1

الخاصية dataset غير موجودة في النوع Element، لكنها موجودة في HTMLElement. تحتاج إلى التأكد من أن الكائن من هذا النوع قبل المتابعة. كما أنه يمكن تعديل حلقة for قليلاً لتعمل أيضًا:

for (const timelineEl of timelineEls) {
  if (timelineEl instanceof HTMLElement) {
    const progress = self.getProgress(timelineEl);
    const timelineKey = timelineEl.dataset.scrollTimeline;
    // ...
  }
}