3 回答
TA貢獻1824條經驗 獲得超8個贊
那是非空斷言運算符。這是一種告訴編譯器“這個表達式不能null或undefined在這里,所以不要抱怨它null或它的可能性undefined”的方法。有時類型檢查器本身無法做出決定。
這里解釋如下:
可以使用新的
!post-fix表達式運算符來斷言其操作數在類型檢查器無法推斷該事實的上下文中是非空且非未定義的。具體而言,該操作x!產生x具有null和undefined排除的類型的值。類似鍵入的形式斷言<T>x和x as T,所述!非空斷言操作者簡單地在所發射的JavaScript代碼移除。
我發現在這個解釋中使用“斷言”一詞有點誤導。它是“斷言”的,即開發人員斷言它,而不是在將要執行測試的意義上。最后一行確實表明它不會發出任何JavaScript代碼。
TA貢獻2039條經驗 獲得超8個贊
路易斯的答案很棒,但我想我會試著簡潔地總結一下:
bang運算符告訴編譯器暫時放松它可能需要的“非空”約束。它告訴編譯器:“作為開發人員,我比你更了解這個變量現在不能為null”。
TA貢獻1875條經驗 獲得超5個贊
作為一個激勵性的例子:使用新的ES Map類型和dict.has(key) ? dict.get(key) : 'default';TS編譯器之類的代碼不能推斷出get調用永遠不會返回null / undefined。dict.has(key) ? dict.get(key)! : 'default';正確縮小類型。
添加回答
舉報
