[英]Allow nullable operands in less- or greater-than comparisons in TypeScript
在 JavaScript 中, 關系表達式中的空操作數被視為 0 :
function f() { return /* either a number or null */; }
let b = f() < 0; // false if f() returns null
但是在 TypeScript 中,如果我為f
提供類型注釋並打開嚴格的空檢查,那么我會得到編譯器錯誤Object is possibly 'null'
:
function f(): number | null { return /* either a number or null */; }
let b = f() < 0; // <-- error TS2531
有沒有辦法告訴編譯器這里可以接受可為空的操作數?
我可以用f()
上的非空斷言關閉編譯器,但我擔心f()!
可能會誤導代碼審查者,因為f()
在這里可以返回 null。
nonNumber < number
回復 javascript 類型強制工作(與number
相比,將null
轉換為數字)。 由於轉換值的方式不明顯,因此類型強制被廣泛認為是所有 javascript 程序中應避免的事情。
Typescript 假設通常情況下,比較中使用的可為空的數字可能是一個潛在的錯誤。 程序員很可能只是在編寫比較時忘記了變量可能為null
。
所以打字稿想要的是讓你顯式地處理null
情況。 這告訴你的代碼的讀者,如果該值是正是發生null
和原來的程序員意null
進行精確處理的方式。
也許是這樣的?
const val = f()
let b = val !== null && val < 0
或者:
let b = (f() ?? 0) < 0
你可以使用f()!
正如您所注意到的,這應該可以消除錯誤。 然而, !
旨在說“程序員在這里斷言這個值不為null
,即使編譯器認為它可能是”。 正如您已經指出的那樣,這不太准確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.