2016-11-16 62 views
10

隨着StrictNullChecks在打字稿2.0啓用,該代碼StrictNullChecks和的getElementById

var el: HTMLElement = document.getElementById('element_id'); 

產生錯誤

Type 'HTMLElement | null' is not assignable to type 'HTMLElement'. 
Type 'null' is not assignable to type 'HTMLElement'. 

這是爲什麼,我怎麼可以讓代碼未做el可空編?

回答

12

你可以寫:

var el = document.getElementById('element_id')!; 

的!意思是「相信我,這不是空引用」

+0

我以前從來沒有見過這個操作符...似乎只有非常少的文檔,但是...偉大,優雅的答案! – series0ne

+0

乾杯!是的,不記得我在哪裏看到:p – AlexG

+0

我不知道這存在。這需要更好地記錄。因爲這樣的情況,我避免了strictNullChecks。 – pllee

1

這是因爲document.getElementById(...);如果找到該元素可以返回HTMLElement的實例,或者如果找不到則返回null。由於這個API是不是你的控制之下,你將不得不修改代碼以使該元件可空:

var el: HTMLElement | null = document.getElementById("..."); 

您也可以創建自己的可空類型的別名:

type NullableHTMLElement = HTMLElement | null; 
var el: NullableHTMLElement = document.getElementById("..."); 

或更好仍然可以使用由AlexG提供的解決方案,它甚至更好!