[英]How can object be null/undefined after checking that object property is an integer using Number.isInteger?
這是我的代碼:
if (
Number.isInteger(prevObj?.prop) &&
Number.isInteger(nextObj?.prop) &&
prevObj.prop !== nextObj.prop
) {
...
}
TypeScript 警告prevObj
/ nextObj
可能是null
或在檢查prop
是 integer后undefined
。
如果我使用typeof prevObj?.prop === 'number'
而不是Number.isInteger
,警告 go 就會消失。
您能解釋一下為什么 TypeScript 會顯示這些警告嗎?
TypeScript 顯示這些警告是因為類型檢查器不知道在您使用可選鏈接運算符 (?) 時定義了 prevObj 和 nextObj。 當您使用可選鏈接時,類型檢查器認為屬性的類型是實際類型和未定義的聯合,因此它不知道該屬性肯定是 integer。
您可以通過使用 typeof 檢查屬性的類型來解決此問題,正如您提到的那樣,或者通過提供類型斷言來告訴類型檢查器 object 已明確定義:
if (
Number.isInteger((prevObj as { prop: number }).prop) &&
Number.isInteger((nextObj as { prop: number }).prop) &&
prevObj.prop !== nextObj.prop
) {
// ...
}
這將告訴類型檢查器 prevObj 和 nextObj 已明確定義並且具有類型為 number 的屬性 prop,因此它不會顯示警告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.