我有以下自定义元素:
class CustomElement extends HTMLElement{
constructor(){ super(); }
config: ConfigModel;
}
window.customElements.define('my-element', CustomElement);
然后,在代码中的某处,我有这样的内容:
const myElement = document.createElement('my-element');
myElement.config = config;
TS在这里抛出错误:
error TS2339: Property 'config' does not exist on type 'HTMLElement'.
有什么办法解决这个问题吗?
编辑:建议强制转换元素的类型。虽然这样做有效,但确实带来了两个问题:
以下是要点:https://gist.github.com/YonatanKra/de42be2fa5499157169ef141ba377998
答案 0 :(得分:1)
您需要将元素强制转换为预期的类型,因为在这种情况下Typescript无法识别类型。
document.createElement('my-element') as CustomElement
还需要继承CustomElement中的HTMLElement类:
const myElement = <CustomElement>document.createElement('my-element');
根据其他问题编辑的答案:
很显然,如果您想访问class CustomElement extends HTMLElement {
对象的属性,则需要键入强制类型转换。但是,在所有其他情况下,您都可以使用默认的CustomElement
类型。它仍然应该允许您对对象执行某些操作,而与HTMLElement
无关。因此,并非每个服务都需要知道它是一个CustomElement
对象。
对于模拟,您可以创建一个CustomElement
继承的CustomElementMock
类
CustomElement
模拟版本仍为class CustomElementMock extends CustomElement {
}
类型,您的原始代码仍应接受。但是,在模拟类内部,您可以覆盖所有功能以执行任何操作或返回模拟数据。
答案 1 :(得分:0)
使用List[(Char, Int)]().maxByOption(_._1).getOrElse(('a', 1))
// (Char, Int) = (a,1)