給定這個 React 組件的片段:
const AccountInformation = (props: { readonly accountData: AccountData | undefined | null }) => {
const hasMultipleAccounts: boolean = props.accountData?.customerAccounts?.length === 1 ? false : true
...
為什么 Typescriptprops.accountData?.customerAccounts?.length在我檢查它是否大于 0 時會抱怨可能是未定義的,(> 0)但是當我檢查它是否等于 1 時錯誤消失了(=== 1)?
這是一個 JS 正在做一些奇怪的事情,一個未定義的屬性被解釋為 0 的情況嗎?
以這種方式撰寫它可以消除錯誤,但我試圖理解這種行為。
const hasMultipleAccounts: boolean = props.accountData?.customerAccounts?.length ?? 0 > 1 ? : true : false
uj5u.com熱心網友回復:
更簡單地說,你在問為什么 TypeScript 抱怨這些陳述句中的第二個:
console.log(undefined === 1); // false
console.log(undefined > 0);
// ^???? Object is possibly 'undefined'.(2532)
...因為任何帶有可選鏈接的屬性訪問操作都具有undefined其可能的結果值之一。
===比 is 更一般>。===用于查看運算元的值型別是否匹配。但是>用于比較兩個數字或比較兩個字串以獲得相對“更大”的值。TypeScript 還防止混合這兩者:
console.log("1" > 0);
// ^??? Operator '>' cannot be applied to types 'string' and 'number'.(2365)
console.log(1 > "0"");
// ^??? Operator '>' cannot be applied to types 'number' and 'string'.(2365)
在 JavaScript 中,我們(相當)習慣于在這些情況下進行隱式轉換,但 TypeScript 的作業是應用嚴格型別,因此通常不允許隱式轉換。在 JavaScript 中,undefined > 0成為NaN > 0which is false(as is undefined <= 0)。但是 TypeScript 認為它可能是錯誤,并為您標記它。
(以上所有內容的游樂場鏈接。)
uj5u.com熱心網友回復:
如果你想使用length > 0你需要空合并:
const i: number | undefined = undefined;
if (i ?? 0 > 0) {
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436895.html
標籤:javascript 反应 打字稿
