2016-02-21 536 views
7

我从Typescript中得到一个错误,我不知道如何纠正它。代码工作正常时,“编译”,但我不能纠正错误。我从代码中提取了涉及错误的部分。我想我必须预测src,但不知道如何。在编辑器和上咕嘟咕嘟Typescript:属性'src'在类型'HTMLElement'上不存在

错误味精编译:

“属性 'SRC' 上型不存在“HTMLElement'.at线53栏17"

... 

element:HTMLElement; /* Defining element */ 

''' 
this.element = document.createElement('img'); /*creating a img*/ 

''' 

这是我运行的方法来渲染元素,位置,顶部和左侧的所有工作都不会发生错误。

display() { 
    this.element.src = this.file; /*This is the line that gives the error*/ 
    this.element.style.position = "absolute"; 
    this.element.style.top = this.pointX.toString() + "px"; 
    this.element.style.left = this.pointY.toString() + "px"; 

    document.body.appendChild(this.element); 
}; 
+0

实际上,'HTMLElement.prototype'没有'src',但'HTMLImageElement.prototype'应该。我不知道TypeScript,但尝试将'element'定义为'HTMLImageElement'而不是'HTMLElement'。 – Oriol

+0

'this.element.setAttribute(“src”,this.file);'也可以。 –

+0

@ c-smile尽管我不认为你的答案是正确的解决方案,但我确实很欣赏以不同方式处理问题的通知 –

回答

10

因为src不是HTMLElement类型的属性,而是HTMLImageElement

如果您确定你会得到一个img元素,你可能想用正确的亚型声明你的变量:

element: HTMLImageElement; /* Defining element */ 

// ... 

this.element = document.createElement('img'); /*creating a img*/ 

此外,你可能想看看什么document.createElement回报。如果您指定"img"作为它的参数,则它是非常相同的类型。

+0

非常感谢你解决了我的问题,我只是假设HTMLElement是一个通用的DOM元素那适合所有。 –

+0

你的假设是完全正确的。一个'HTMLImageElement'实际上也是'HTMLElement'。更确切地说,它是一个子类型。但并非所有元素都包含'src'属性,因此在这种情况下需要使用子类型。 –

+0

谢谢您的澄清 –

0

您需要将其声明为HTMLImageElement,其中有一个src属性。

17

使用铸造:

(<HTMLImageElement>document.querySelector(".company_logo")).src 
0
document.getElementById('img').setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='); 

通过设置属性方法Set源。

0

使用像@这样的铸造whereDatApp.com建议为我工作。使用这样的查询选择器:

querySelector("img[name='menubanner']") 
+0

[请格式化您的代码](https://stackoverflow.com/editing-help) – Dwhitz

相关问题