簡體   English   中英

在使用 Number.isInteger 檢查 object 屬性是 integer 后,object 怎么可能為 null/undefined?

[英]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是 integerundefined

如果我使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM