代码如下:
const test = Array.from(document.getElementsByClassName('mat-form-field-infix'));
test.forEach((element) => {
element.outerHTML = '<div class="good-day-today" style="width: 0px;"></div>'; // Please note that this line works fine!
element.style.padding = '10px';
element.style.borderTop = '0';
});
字符串
编译时出错:
src/app//.component.ts(101,21)中出现错误:错误TS 2339:类型“Element”上不存在属性“style”。src/app//.component.ts(102,21):错误TS 2339:类型“Element”上不存在属性“style”。
我该怎么解决?
我尝试删除Array.from...
部分,尝试使用for of
和for in
,尝试as any
,但以上是我必须这样做的方式。
8条答案
按热度按时间6kkfgxo01#
你需要一个类型转换:
字符串
这是因为
getElementsByClassName
只返回HTMLCollection<Element>
,而Element
没有style
属性。然而,HTMLElement
通过它的ElementCSSInlineStyle
扩展接口实现了它。请注意,这种类型转换是类型安全的,因为每个
Element
要么是HTMLElement
,要么是SVGElement
,我希望您的SVG Elements没有类。qpgpyjmq2#
另一种选择是使用
querySelectorAll
和类型参数。getElementsByClassName
不是通用的,但是querySelectorAll
是-你可以只传递将要被选择的元素的类型,像这样:字符串
这不需要任何类型转换,* 和 * 它将允许您立即使用
forEach
,而不是首先将其转换为数组。(getElementsByClassName
返回一个HTMLCollection,它没有forEach
方法;querySelectorAll
返回一个NodeList
,它确实有一个forEach
方法,至少在最新的浏览器上是这样。为了支持古老的浏览器,你需要一个polyfill,或者先把它转换成数组。如果你碰巧只需要一个元素,你可以使用
querySelector
,它也是通用的:型
querySelectorAll
(和querySelector
)的另一个好处是它们接受CSS选择器字符串,这可以更加灵活和精确。例如,选择器字符串型
将选择
<div class="container">
的子项,这些子项是<input>
s并被选中。wqlqzqxt3#
解决方法可能是这样做:
字符串
也许这不是最好的解决方案,但它应该工作,我用了很多次:)
vjhs03f74#
也许这可以帮助:
字符串
eoxn13cs5#
当你设置outerHTML的时候,你就破坏了原来的元素。所以,你的造型不起作用。
您会注意到,如果将其更改为set innerHTML,样式 * 确实 * 有效。
这并没有做完全相同的事情,但我希望它能为您指明正确的方向。
字符串
ahy6op9u6#
我也面临着类似的问题,而做
字符串
所以我没有添加style属性,而是通过添加另一个类来解决它。
示例:
型
}); };
mkshixfv7#
我想我找到了一个更简单的方法:
只需创建一个index.d.ts文件并添加:
字符串
6xfqseft8#
Jonas Wilms的answer不是完全正确的(再也不是了?).
虽然我怀疑在这种情况下类型转换不会导致任何问题,但我仍然会尽可能避免类型转换。在这种情况下,可以使用instanceof narrowing避免类型转换:
字符串