2017-03-26 280 views
2

有沒有一種方法,使打字稿不會拋出錯誤「TS2339:屬性值不上類型元素存在」對於這樣的代碼?:querySelector在打字稿

myRow.querySelector('.my-class').value = myVal 

鑄造作爲< HTMLInputElement>原因碼完全打破。

Typescript似乎不能很好地處理涉及DOM的事情,除非我錯過了某些東西;即它可以選擇特定的一般函數來返回任何元素。

+2

This:'(myRow.querySelector('。myClass')as HTMLInputElement).value = myVal' does not work? –

+0

正確。這會產生錯誤:'2349:不能調用類型缺少呼叫簽名的快遞。' –

+0

什麼是myRow? –

回答

4

querySelector方法返回Element | null
如果您不使用strictNullChecks然後Element,並且它沒有value成員。

所以它鑄造HTMLInputElement正如我在評論中寫道作品:

let myRow = document.getElementById('my-row'); 
(myRow.querySelector('.myClass') as HTMLInputElement).value = " a vaule"; 

您收到的錯誤是在第一行的末尾忘記分號的結果,會發生什麼情況是,編譯器認爲你試圖這樣做:

document.getElementById('my-row')(myRow.querySelector('.myClass') as HTMLInputElement) 

不要忘記用分號結束行。

+0

謝謝;這樣可行。釘在分號上。你知道爲什麼這是必需的嗎? –

+0

http://stackoverflow.com/questions/444080/do-you-recommend-using-semicolons-after-every-statement-in-javascript –

+0

本頁內容:https://github.com/rse/es6-features 「ECMAScript 6和所有工具(包括壓縮器)都能夠完全支持當今的自動分號推理/插入,因此,ECMAScript 6編碼器現在可以擺脫幾乎所有的分號並從源代碼中移除混亂。」也就是說,在這個特定情況下需要分號很奇怪。 –