【问题标题】:Automatically change the type of the elements in an array自动更改数组中元素的类型
【发布时间】:2019-09-09 11:06:44
【问题描述】:

我使用 typescript 和 react 为我的项目写了一个类。

class myImage extends Image {
   oriHeight: number;
}

上传两张图片后,我有一个名为“results”的数组,其中包含 myImage 类型的对象。

[myImage, myImage]

当我在浏览器中点击它时,我可以看到每个元素的 oriHeight 的数据。

然后我尝试使用 results.map() 方法遍历该数组中的所有元素。

results.map((result: myImage) => {
   console.log(result);
   var tmp = result.oriHeight;
   console.log(tmp);
})

但是,result 的输出不再是一个对象,而是一个 img 标签(因为 Image 的类型是 HTMLElement),这使得 result 的数据不可读。所以每个 tmp 的输出都是未定义的。

我对此感到困惑。为什么我想遍历的时候myImage对象会变成img标签?我希望有人可以帮助我。真的很感激。

【问题讨论】:

标签: html reactjs typescript


【解决方案1】:

我敢打赌,您的数据实际上很好。当您在控制台记录一个 html 元素时,chrome 控制台会将其显示为 html 标记而不是 javascript 对象。

更新:将您自己的属性添加到 DOM 元素通常是一种不好的做法,因为它们更难调试,并且您有可能被未来的浏览器属性覆盖。相反,您可以创建一个包含图像和自定义属性的 javascript 对象。这是一个示例接口定义:

interface MyImage {
    imageEl: HTMLImageElement;
    oriHeight: number;
}

【讨论】:

  • 谢谢!这就说得通了。但是我仍然无法获得oriHeight的数据。它总是未定义。
  • 嗯,那么不确定。为了调试,我会开始将日志添加回您设置oriHeight 的位置,以便您可以看到它在哪里被取消设置,或者它是否得到了。或者,更好的是,以这种方式扩展 DOM 元素通常不是一个好习惯,因为调试起来很麻烦。相反,您可以使用包含 DOM 元素和自定义道具的 javascript 对象。我也用这个建议更新了我的答案。
  • 谢谢!真的很感激!
猜你喜欢
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 2023-03-25
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多